Hi Brian, That is a very good idea! Thanks for the tip off :-)
Actually, this has all prompted me to finally make my HID classes be a proper, cross-platform plugin (Win32 and MachO). That should give direct control of the keyboard (and other devices) by hardware buttons, rather than keyboard translation object, which is what my app really needs. More on this in a separate post... Dave. > From: Brian Rathbone <[EMAIL PROTECTED]> > Reply-To: REALbasic NUG <[email protected]> > Date: Wed, 19 Apr 2006 14:59:32 -0400 > To: REALbasic NUG <[email protected]> > Subject: Re: Raw key codes from Window.KeyDown on Win32 as well as OSX > > > > 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> _______________________________________________ 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>
