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>