home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 24 / CDACTUAL24.iso / SHARE / os2 / edm2 / common / snippets / numlock1.txt < prev    next >
Encoding:
Internet Message Format  |  1997-01-25  |  1.7 KB

  1. From: lafaix@ibm.net (Martin Lafaix)
  2.  
  3. Using DosDevIOCtl functions is not sufficient if you use PM: you also
  4. need to call WinSetKeyboardStateTable.
  5.  
  6. #define INCL_DOSFILEMGR
  7. #define INCL_DOSDEVICES
  8. #define INCL_DOSDEVIOCTL
  9. #define INCL_WININPUT
  10.  
  11. #include <os2.h>
  12. #include <stdio.h>
  13.  
  14. VOID SetNumLockState(BOOL bSet) /* if bSet is true, enable NUMLOCK */
  15. {
  16.   SHIFTSTATE ss;
  17.   BYTE KeyState[257];
  18.   BOOL bSet;
  19.   APIRET rc;
  20.   ULONG ulAction, ulLength;
  21.   HFILE hf;
  22.  
  23.   rc = DosOpen("KBD$",
  24.                &hf,
  25.                &ulAction,
  26.                0L,
  27.                0,
  28.                FILE_OPEN,
  29.                OPEN_ACCESS_READONLY|OPEN_SHARE_DENYNONE,
  30.                0);
  31.  
  32.   /* reading keyboard state */
  33.   ulAction = 0;
  34.   ulLength = sizeof(ss);
  35.   rc = DosDevIOCtl(hf,
  36.                    IOCTL_KEYBOARD,
  37.                    KBD_GETSHIFTSTATE,
  38.                    0,
  39.                    0,
  40.                    &ulAction,
  41.                    &ss,
  42.                    sizeof(ss),
  43.                    &ulLength);
  44.  
  45.   WinSetKeyboardStateTable(HWND_DESKTOP, KeyState, FALSE);
  46.  
  47.   /* changing state -- if bSet is true, enables NUMLOCK */
  48.   if(bSet)
  49.     {
  50.     KeyState[VK_NUMLOCK] |= 0x01;
  51.     ss.fsState |= NUMLOCK_ON;
  52.     }
  53.   else
  54.     {
  55.     KeyState[VK_NUMLOCK] &= ~0x01;
  56.     ss.fsState &= ~NUMLOCK_ON;
  57.     }
  58.  
  59.   /* seting keyboard state */
  60.   WinSetKeyboardStateTable(HWND_DESKTOP, KeyState, TRUE);
  61.  
  62.   ulAction = sizeof(ss);
  63.   ulLength = 0;
  64.   rc = DosDevIOCtl(hf,
  65.                    IOCTL_KEYBOARD,
  66.                    KBD_SETSHIFTSTATE,
  67.                    &ss,
  68.                    sizeof(ss),
  69.                    &ulAction,
  70.                    0,
  71.                    0,
  72.                    &ulLength);
  73.  
  74.   rc = DosClose(hf);
  75. }
  76.