⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keylocks.c

📁 使用于OS/2下的小工具的C源程序,使用于OS/2下的小工具的C源程序
💻 C
字号:
/*
* KEYLOCKS.C - Sets the NUMLOCK or SCROLL LOCK or CAPS LOCK on keyboard.
*
*
* PROGRAMMER:	    Martti Ylikoski
* CREATED:	    23.8.1992
*/
static char *VERSION = "Version  1.0. Copyright (c) Martti Ylikoski, 1992." ;
/*
*/

static char *progname ;

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define INCL_DOSDEVICES
#define INCL_DOSDEVIOCTL
#include <os2.h>


int main(int argc, char *argv[])
{
SHIFTSTATE ShiftState ;
USHORT ret ;
HFILE keyb ;
USHORT action ;

   progname = argv[0] ;


   printf("%s - Sets or clears NUMLOCK or CAPSLOCK or SCROLLLOCK on keyboard\n",progname) ;
   puts(VERSION) ;
   printf("Usage: %s [/C | /S ] + [NUMLOCK | CAPSLOCK | SCROLLLOCK ]\n", progname) ;
   puts("E.g. KEYLOCKS /C NUMLOCK, would clear the NUM LOCK") ;

   if (argc != 3 && argc != 1)
   {
      puts("Wrong number of arguments.") ;
      return( 1 ) ;
   }

   if ((ret = DosOpen("KBD$", &keyb, &action, 0L, FILE_NORMAL, FILE_OPEN,
      OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYREADWRITE, 0L)) != 0)
   {
      printf("%s: error in DosOpen\n", progname) ;
      return( 1 ) ;
   }

   if ((ret = DosDevIOCtl(&ShiftState, 0L, 0x0073, 0x0004, keyb)) != 0)
   {
      printf("%s: error in DosDevIOCtl\n", progname) ;
      return( 1 ) ;
   }

   if (argc == 3)
   {
      if ( toupper(argv[1][1]) == 'S')
      {
         if (strcmpi(argv[2], "CAPSLOCK") == 0)
         {
            ShiftState.fsState |= CAPSLOCK_ON ;
         }
         else
         if (strcmpi(argv[2], "SCROLLLOCK") == 0)
         {
            ShiftState.fsState |= SCROLLLOCK_ON ;
         }
         else
         if (strcmpi(argv[2], "NUMLOCK") == 0)
         {
            ShiftState.fsState |= NUMLOCK_ON ;
         }
      }
      else
      if ( toupper(argv[1][1]) == 'C')
      {
         if (strcmpi(argv[2], "CAPSLOCK") == 0)
         {
            ShiftState.fsState &= ~CAPSLOCK_ON ;
         }
         else
         if (strcmpi(argv[2], "SCROLLLOCK") == 0)
         { 
            ShiftState.fsState &= ~SCROLLLOCK_ON ;
         }
         else
         if (strcmpi(argv[2], "NUMLOCK") == 0)
         {
            ShiftState.fsState &= ~NUMLOCK_ON ;
         }
      }

      if ((ret = DosDevIOCtl(0L, &ShiftState, 0x0053, 0x0004, keyb)) != 0)
      {
         printf("%s: error in DosDevIOCtl\n", progname) ;
         return( 1 ) ;
      }
   }
   if ((ret = DosDevIOCtl(&ShiftState, 0L, 0x0073, 0x0004, keyb)) != 0)
   {
      printf("%s: error in DosDevIOCtl\n", progname) ;
      return( 1 ) ;
   }

   puts("Keyboard status in effect:\n") ;

   if (ShiftState.fsState & RIGHTSHIFT)
      puts("Right shift key down.") ;

   if (ShiftState.fsState & LEFTSHIFT)
      puts("Left shift key down.") ;

   if (ShiftState.fsState & CONTROL)
      puts("Either CONTROL key down.") ;

   if (ShiftState.fsState & ALT)
      puts("Either ALT key down.") ;

   if (ShiftState.fsState & SCROLLLOCK_ON)
      puts("SCROLL LOCK mode turned on.") ;

   if (ShiftState.fsState & NUMLOCK_ON)
      puts("NUMLOCK mode turned on.") ;

   if (ShiftState.fsState & CAPSLOCK_ON)
      puts("CAPSLOCK mode turned on.") ;

   if (ShiftState.fsState & INSERT_ON)
      puts("INSERT mode turned on.") ;

   if (ShiftState.fsState & LEFTCONTROL)
      puts("Left CONTROL key down.") ;

   if (ShiftState.fsState & RIGHTCONTROL)
      puts("Right CONTROL key down.") ;

   if (ShiftState.fsState & LEFTALT)
      puts("Left ALT key down.") ;

   if (ShiftState.fsState & RIGHTALT)
      puts("Right ALT key down.") ;

   if (ShiftState.fsState & SCROLLLOCK)
      puts("SCROLL LOCK key down.") ;

   if (ShiftState.fsState & NUMLOCK)
      puts("NUMLOCK key down.") ;

   if (ShiftState.fsState & CAPSLOCK)
      puts("CAPSLOCK key down.") ;

   if (ShiftState.fsState & SYSREQ)
      puts("SYSREQ key down.") ;

   return( 0 ) ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -