keybd_event是函数功能:该函数合成一次击键事件。系统可使用这种合成的击键事件来产生WM_KEYUP或WM_KEYDOWN消息。
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);
例子3:模拟按下'ctrl+v'键
[System.Runtime.InteropServices.DllImport("user32")]
public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
private void FormWork_Load(object sender, EventArgs e)
{
keybd_event((byte)Keys.ControlKey, 0, 0, 0);//按下
keybd_event((byte)Keys.V, 0, 0, 0);
keybd_event((byte)Keys.ControlKey, 0, 0x2, 0);//松开
keybd_event((byte)Keys.V, 0, 0x2, 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 CapsLock 20
I 73 8 104 F9 120 Esc 27
J 74 9 105 F10 121 Spacebar 32
K 75 * 106 F11 122 PageUp 33
L 76 + 107 F12 123 PageDown 34
M 77 Enter108 -- -- End 35
N 78 - 109 -- -- Home 36
O 79 . 110 -- -- LeftArrow 37
P 80 / 111 -- -- UpArrow 38
Q 81 -- -- -- -- RightArrow 39
R 82 -- -- -- -- DownArrow 40
S 83 -- -- -- -- Insert 45
T 84 -- -- -- -- Delete 46
U 85 -- -- -- -- Help 47
V 86 -- -- -- -- NumLock 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
0x1鼠标左键
0x2鼠标右键
0x3CANCEL键
0x4鼠标中键
0x8BACKSPACE键
0x9TAB键
0xCCLEAR键
0xDENTER键
0x10SHIFT键
0x11CTRL键
0x12MENU键
0x13PAUSE键
0x14CAPSLOCK键
0x1BESC键
0x20SPACEBAR键
0x21PAGEUP键
0x22PAGEDOWN键
0x23END键
0x24HOME键
0x25LEFTARROW键
0x26UPARROW键
0x27RIGHTARROW键
0x28DOWNARROW键
0x29Select键
0x2APRINTSCREEN键
0x2BEXECUTE键
0x2CSNAPSHOT键
0x2DInsert键
0x2EDelete键
0x2FHELP键
0x90NUMLOCK键
A至Z键与A–Z字母的ASCII码相同:
值描述
65A键
66B键
67C键
68D键
69E键
70F键
71G键
72H键
73I键
74J键
75K键
76L键
77M键
78N键
79O键
80P键
81Q键
82R键
83S键
84T键
85U键
86V键
87W键
88X键
89Y键
90Z键
0至9键与数字0–9的ASCII码相同:
值描述
480键
491键
502键
513键
524键
535键
546键
557键
568键
579键
下列常数代表数字键盘上的键:
值描述
0x600键
0x611键
0x622键
0x633键
0x644键
0x655键
0x666键
0x677键
0x688键
0x699键
0x6AMULTIPLICATIONSIGN(*)键
0x6BPLUSSIGN(+)键
0x6CENTER键
0x6DMINUSSIGN(–)键
0x6EDECIMALPOINT(.)键
0x6FDIVISIONSIGN(/)键
下列常数代表功能键:
值描述
0x70F1键
0x71F2键
0x72F3键
0x73F4键
0x74F5键
0x75F6键
0x76F7键
0x77F8键
0x78F9键
0x79F10键
0x7AF11键
0x7BF12键
0x7CF13键
0x7DF14键
0x7EF15键
0x7FF16键
0None
3Cancel(Break)
8Back
9Tab
13Return
16ShiftKey
17ControlKey
18Menu
19Pause
20Capital(大小写)
27Escape
32Space
33PageUp
34Next(PageDonw)
35End
36Home
37Left
38Up
39Right
40Down
0-948-57
45Insert
46Delete
65->90A->Z
91LWin
93Apps
96105NumPad0-
106Multiply*
107Add+
108
109Subtract-
110Decimal.
111Divide/
112-123F1-F12
144NumLock
145Scroll
173VolumeMute
174VolumeDown
175VolumeUp
186Oem1;
187Oemplus=
188Oemcomma,
189OemMinus-
190OemPeriod.
191OemQuestion/
192Oemtilde`
219OemOpenBrackets[
220Oem5/
221Oem6]
222Oem7'