Windows提供了一个模拟键盘API函数Keybd_event(),使用该函数可以相应的屏蔽键盘的动作。Keybd_event()函数能触发一个按键事件,也就是说会产生一个WM_KEYDOWN或WM_KEYUP消息。
该函数原型如下:
VOID keybd_event(
BYTE bVk, // virtual-key code
BYTE bScan, // hardware scan code
DWORD dwFlags, // flags specifying various function options
DWORD dwExtraInfo // additional data associated with keystroke
);
从原型可以看出,Keybd_event()共有四个参数:
第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab(其他具体的参见附录:常用模拟键的键值对照表);
第二个参数为扫描码,一般不用设置,用0代替就行;
第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成"KEYEVENTF_KEYUP";
第四个参数一般也是置0即可。
例子1:模拟按下'A'键
keybd_event(65,0,0,0);
keybd_event(65,0,KEYEVENTF_KEYUP,0);
例子2:模拟按下'ALT+F4'键
keybd_event(18,0,0,0);
keybd_event(115,0,0,0);
keybd_event(115,0,KEYEVENTF_KEYUP,0);
keybd_event(18,0,KEYEVENTF_KEYUP,0);
附:常用模拟键的键值对照表(也可参考http://msdn.microsoft.com/en-us/library/dd375731(v=vs.85).aspx)
键盘键与虚拟键码对照表
字母和数字键 | 数字小键盘的键 | 功能键 | 其它键 | ||||
键 | 键码 | 键 | 键码 | 键 | 键码 | 键 | 键码 |
A | 65 | 0 | 96 | F1 | 112 | Backspace | 8 |
B | 66 | 1 | 97 | F2 | 113 | Tab | 9 |
C | 67 | 2 | 98 | F3 | 114 | Clear | 12 |
D | 68 | 3 | 99 | F4 | 115 | Enter | 13 |
E | 69 | 4 | 100 | F5 | 116 | Shift | 16 |
F | 70 | 5 | 101 | F6 | 117 | Control | 17 |
G | 71 | 6 | 102 | F7 | 118 | Alt | 18 |
H | 72 | 7 | 103 | F8 | 119 | Caps Lock | 20 |
I | 73 | 8 | 104 | F9 | 120 | Esc | 27 |
J | 74 | 9 | 105 | F10 | 121 | Spacebar | 32 |
K | 75 | * | 106 | F11 | 122 | Page Up | 33 |
L | 76 | + | 107 | F12 | 123 | Page Down | 34 |
M | 77 | Enter | 108 | -- | -- | End | 35 |
N | 78 | - | 109 | -- | -- | Home | 36 |
O | 79 | . | 110 | -- | -- | Left Arrow | 37 |
P | 80 | / | 111 | -- | -- | Up Arrow | 38 |
Q | 81 | -- | -- | -- | -- | Right Arrow | 39 |
R | 82 | -- | -- | -- | -- | Down Arrow | 40 |
S | 83 | -- | -- | -- | -- | Insert | 45 |
T | 84 | -- | -- | -- | -- | Delete | 46 |
U | 85 | -- | -- | -- | -- | Help | 47 |
V | 86 | -- | -- | -- | -- | Num Lock | 144 |
W | 87 | ||||||
X | 88 | ||||||
Y | 89 | ||||||
Z | 90 | ||||||
0 | 48 | ||||||
1 | 49 | ||||||
2 | 50 | ||||||
3 | 51 | ||||||
4 | 52 | ||||||
5 | 53 | ||||||
6 | 54 | ||||||
7 | 55 | ||||||
8 | 56 | ||||||
9 | 57 |