Dave Addey wrote:

Hi all,

I¹m porting my Mac app to Windows.  To date, I¹ve been using the MBS
CarbonEvents.KeyboardRawKeyDown carbon event to detect raw keydown presses
(and get their keycode) on Mac OS X (MachO app).  This has been working
well, and has enabled me to create a complex keyboard control system whereby
I know exactly which key is being pressed, regardless of the modifiers in
use.  It¹s much better than Window.KeyDown, which only gives me the string
for the pressed key.

While I don't have a perfect solution for you, I do have something I've been testing within keydown events to get the state of the keyboard. What I am doing is calling GetKeyboardState within the keydown event, then looping through the returned memoryblock to identify which keys are down. The location in the memoryblock directly corresponds to the Windows virtual keycodes, which can be found on MSDN (I tacked the list I've been using to the end of this message).

It looks something like this:

Declare Function GetKeyboardState Lib "user32" Alias "GetKeyboardState" (pbKeyState As ptr) As integer

 dim mbkeys as memoryBlock
 dim i as integer

  mbkeys = newmemoryBlock(256)
   if GetKeyboardState(mbkeys) = 0 then
     //error
   else
     for i = 8 to 255 'skip first 7 they are for the mouse
       if mbkeys.byte(i) > 127 then 'high order word = 1
         //ignore modifiers
         select case i
         case VK_SHIFT
         case VK_CONTROL
         case VK_MENU
         case VK_LSHIFT
         case VK_RSHIFT
         case VK_LCONTROL
         case VK_RCONTROL
         case VK_LMENU
         case VK_RMENU
         else
           ///this key is down
          msgbox str(i)
         end
   next
   end

This is only an experimental beginning for me, and I plan to make some serious changes to this code for my own use, but I thought it might be useful to you.

hth,

Brian

   VK_LBUTTON (01)
       Left mouse button

   VK_RBUTTON (02)
       Right mouse button

   VK_CANCEL (03)
       Control-break processing

   VK_MBUTTON (04)
       Middle mouse button (three-button mouse)

   VK_BACK (08)
       BACKSPACE key

   VK_TAB (09)
       TAB key

   VK_CLEAR (0C)
       CLEAR key

   VK_RETURN (0D)
       ENTER key

   VK_SHIFT (10)
       SHIFT key

   VK_CONTROL (11)
       CTRL key

   VK_MENU (12)
       ALT key

   VK_PAUSE (13)
       PAUSE key

   VK_CAPITAL (14)
       CAPS LOCK key

   VK_ESCAPE (1B)
       ESC key

   VK_SPACE (20)
       SPACEBAR

   VK_PRIOR (21)
       PAGE UP key

   VK_NEXT (22)
       PAGE DOWN key

   VK_END (23)
       END key

   VK_HOME (24)
       HOME key

   VK_LEFT (25)
       LEFT ARROW key

   VK_UP (26)
       UP ARROW key

   VK_RIGHT (27)
       RIGHT ARROW key

   VK_DOWN (28)
       DOWN ARROW key

   VK_SELECT (29)
       SELECT key

   VK_PRINT (2A)
       PRINT key

   VK_EXECUTE (2B)
       EXECUTE key

   VK_SNAPSHOT (2C)
       PRINT SCREEN key

   VK_INSERT (2D)
       INS key

   VK_DELETE (2E)
       DEL key

   VK_HELP (2F)
       HELP key

    (30)
       0 key

    (31)
       1 key

    (32)
       2 key

    (33)
       3 key

    (34)
       4 key

    (35)
       5 key

    (36)
       6 key

    (37)
       7 key

    (38)
       8 key

    (39)
       9 key

    (41)
       A key

    (42)
       B key

    (43)
       C key

    (44)
       D key

    (45)
       E key

    (46)
       F key

    (47)
       G key

    (48)
       H key

    (49)
       I key

    (4A)
       J key

    (4B)
       K key

    (4C)
       L key

    (4D)
       M key

    (4E)
       N key

    (4F)
       O key

    (50)
       P key

    (51)
       Q key

    (52)
       R key

    (53)
       S key

    (54)
       T key

    (55)
       U key

    (56)
       V key

    (57)
       W key

    (58)
       X key

    (59)
       Y key

    (5A)
       Z key

   VK_LWIN (5B)
       Left Windows key (Microsoft Natural keyboard)

   VK_RWIN (5C)
       Right Windows key (Natural keyboard)

   VK_NUMPAD0 (60)
       Numeric keypad 0 key

   VK_NUMPAD1 (61)
       Numeric keypad 1 key

   VK_NUMPAD2 (62)
       Numeric keypad 2 key

   VK_NUMPAD3 (63)
       Numeric keypad 3 key

   VK_NUMPAD4 (64)
       Numeric keypad 4 key

   VK_NUMPAD5 (65)
       Numeric keypad 5 key

   VK_NUMPAD6 (66)
       Numeric keypad 6 key

   VK_NUMPAD7 (67)
       Numeric keypad 7 key

   VK_NUMPAD8 (68)
       Numeric keypad 8 key

   VK_NUMPAD9 (69)
       Numeric keypad 9 key

   VK_MULTIPLY (6A)
       Multiply key

   VK_ADD (6B)
       Add key

   VK_SEPARATOR (6C)
       Separator key

   VK_SUBTRACT (6D)
       Subtract key

   VK_DECIMAL (6E)
       Decimal key

   VK_DIVIDE (6F)
       Divide key

   VK_F1 (70)
       F1 key

   VK_F2 (71)
       F2 key

   VK_F3 (72)
       F3 key

   VK_F4 (73)
       F4 key

   VK_F5 (74)
       F5 key

   VK_F6 (75)
       F6 key

   VK_F7 (76)
       F7 key

   VK_F8 (77)
       F8 key

   VK_F9 (78)
       F9 key

   VK_F10 (79)
       F10 key

   VK_F11 (7A)
       F11 key

   VK_F12 (7B)
       F12 key

   VK_F13 (7C)
       F13 key

   VK_F14 (7D)
       F14 key

   VK_F15 (7E)
       F15 key

   VK_F16 (7F)
       F16 key

   VK_F17 (80H)
       F17 key

   VK_F18 (81H)
       F18 key

   VK_F19 (82H)
       F19 key

   VK_F20 (83H)
       F20 key

   VK_F21 (84H)
       F21 key

   VK_F22 (85H)
       F22 key

   VK_F23 (86H)
       F23 key

   VK_F24 (87H)
       F24 key

   VK_NUMLOCK (90)
       NUM LOCK key

   VK_SCROLL (91)
       SCROLL LOCK key

   VK_LSHIFT (A0)
       Left SHIFT key

   VK_RSHIFT (A1)
       Right SHIFT key

   VK_LCONTROL (A2)
       Left CONTROL key

   VK_RCONTROL (A3)
       Right CONTROL key

   VK_LMENU (A4)
       Left MENU key (ALT)

   VK_RMENU (A5)
       Right MENU key (ALT)


_______________________________________________
Unsubscribe or switch delivery mode:
<http://www.realsoftware.com/support/listmanager/>

Search the archives of this list here:
<http://support.realsoftware.com/listarchives/lists.html>

Reply via email to