在Windows大行其道的今天,windows界面程序受到广大用户的欢迎。对这些程序的操作不外乎两种,键盘输入控制和鼠标输入控制。有时,对于繁杂的,或重复性的操作,我们能否通过编制程序来代替手工输入,而用程序来模拟键盘及鼠标的输入呢?答案是肯定的。这主要是通过两个API函数来实现的。
下面以Delphi为例来介绍一下如何实现这两个功能。模拟键盘我们用Keybd_event这个api函数,模拟鼠标按键用mouse_event函数。大家不用担心,在delphi里调用api函数是很方便的事。
先介绍一下Keybd_event函数。Keybd_event能触发一个按键事件,也就是说回产生一个WM_KEYDOWN或WM_KEYUP消息。当然也可以用产生这两个消息来模拟按键,但是没有直接用这个函数方便。 Keybd_event共有四个参数,第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab。第二个参数为扫描码,一般不用设置,用0代替就行。第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成“KEYEVENTF_KEYUP”,第四个参数一般也是置0即可。用如下代码即可实现模拟按下i键,其中的$49表示i键的虚拟键值:
keybd_event($49,0,0,0);
keybd_event($49,0,KEYEVENTF_KEYUP,0); ...
mouse_event最好配合setcursorpos(x,y)函数一起使用,与 Keybd_event类似,mouse_event有五个参数,第一个为选项标志,为MOUSEEVENTF_LEFTDOWN时表示左键按下,为 MOUSEEVENTF_LEFTUP表示左键松开,向系统发送相应消息。第二三个参数分别表示x,y相对位置,一般可设为0,0,第四五个参数并不重要,一般也可设为0,0。若要得到Keybd_event和mouse_event函数的更详细的用法,可以查阅msdn或delphi帮助。下面是关于
mouse_event的示例代码:
setcursorpos(20,132);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); ...
上面的代码表示鼠标的双击,若要表示单击,用两个mouse_event即可(一次放下,一次松开)。
注意,不管是模拟键盘还是鼠标事件,都要注意还原,即按完键要松开,一个keydown对应一个keyup;鼠标单击 完也要松开,不然可能影响程序的功能。
模拟键盘输入首先要用到一个API函数:keybd_event。
我们是菜鸟,所以不必具体去理解它的详细用法,只要按以下方法使用即可了!呵呵!
模拟按键有两个基本动作,即按下键和放开按键,所以我们每模拟一次按键就要调用两次该API函数,其方法是:
例子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);
附:常用模拟键的键值对照表。
键盘键与虚拟键码对照表
字母和数字键 数字小键盘的键 功能键 其它键
键 键码 键 键码 键 键码 键 键码
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
好了,希望本文能让你对模拟键盘和鼠标按键有个初步的了解,如果想更深入的了解其中的奥妙,可以查阅详实的msdn在线帮助,并多多动手实践。
附:更详细的键值表:
常数名称
十六进制值
十进制值
对应按键
VK_LBUTTON
01
1
鼠标的左键
VK_RBUTTON
02
2
鼠标的右键
VK-CANCEL
03
3
Ctrl+Break(通常不需要处理)
VK_MBUTTON
04
4
鼠标的中键(三按键鼠标)
VK_BACK
08
8
Backspace键
VK_TAB
09
9
Tab键
VK_CLEAR
0C
12
Clear键(Num Lock关闭时的数字键盘5)
VK_RETURN
0D
13
Enter键
VK_SHIFT
10
16
Shift键
VK_CONTROL
11
17
Ctrl键
VK_MENU
12
18
Alt键
VK_PAUSE
13
19
Pause键
VK_CAPITAL
14
20
Caps Lock键
VK_ESCAPE
1B
27
Ese键
VK_SPACE
20
32
Spacebar键
VK_PRIOR
21
33
Page Up键
VK_NEXT
22
34
Page Domw键
VK_END
23
35
End键
VK_HOME
24
36
Home键
VK_LEFT
25
37
LEFT ARROW 键(←)
VK_UP
26
38
UP ARROW键(↑)
VK_RIGHT
27
39
RIGHT ARROW键(→)
VK_DOWN
28
40
DOWN ARROW键(↓)
VK_Select
29
41
Select键
VK_PRINT
2A
42
VK_EXECUTE
2B
43
EXECUTE键
VK_SNAPSHOT
2C
44
Print Screen键(抓屏)
VK_Insert
2D
45
Ins键(Num Lock关闭时的数字键盘0)
VK_Delete
2E
46
Del键(Num Lock关闭时的数字键盘.)
VK_HELP
2F
47
Help键
VK_0
30
48
0键
VK_1
31
49
1键
VK_2
32
50
2键
VK_3
33
51
3键
VK_4
34
52
4键
VK_5
35
53
5键
VK_6
36
54
6键
VK_7
37
55
7键
VK_8
38
56
8键
VK_9
39
57
9键
VK_A
41
65
A键
VK_B
42
66
B键
VK_C
43
67
C键
VK_D
44
68
D键
VK_E
45
69
E键
VK_F
46
70
F键
VK_G
47
71
G键
VK_H
48
72
H键
VK_I
49
73
I键
VK_J
4A
74
J键
VK_K
4B
75
K键
VK_L
4C
76
L键
VK_M
4D
77
M键
VK_N
4E
78
N键
VK_O
4F
79
O键
VK_P
50
80
P键
VK_Q
51
81
Q键
VK_R
52
82
R键
VK_S
53
83
S键
VK_T
54
84
T键
VK_U
55
85
U键
VK_V
56
86
V键
VK_W
57
87
W键
VK_X
58
88
X键
VK_Y
59
89
Y键
VK_Z
5A
90
Z键
VK_NUMPAD0
60
96
数字键0键
VK_NUMPAD1
61
97
数字键1键
VK_NUMPAD2
62
98
数字键2键
VK_NUMPAD3
62
99
数字键3键
VK_NUMPAD4
64
100
数字键4键
VK_NUMPAD5
65
101
数字键5键
VK_NUMPAD6
66
102
数字键6键
VK_NUMPAD7
67
103
数字键7键
VK_NUMPAD8
68
104
数字键8键
VK_NUMPAD9
69
105
数字键9键
VK_MULTIPLY
6A
106
数字键盘上的*键
VK_ADD
6B
107
数字键盘上的+键
VK_SEPARATOR
6C
108
Separator键
VK_SUBTRACT
6D
109
数字键盘上的-键
VK_DECIMAL
6E
110
数字键盘上的.键
VK_DIVIDE
6F
111
数字键盘上的/键
VK_F1
70
112
F1键
VK_F2
71
113
F2键
VK_F3
72
114
F3键
VK_F4
73
115
F4键
VK_F5
74
116
F5键
VK_F6
75
117
F6键
VK_F7
76
118
F7键
VK_F8
77
119
F8键
VK_F9
78
120
F9键
VK_F10
79
121
F10键
VK_F11
7A
122
F11键
VK_F12
7B
123
F12键
VK_NUMLOCK
90
144
Num Lock 键
VK_SCROLL
91
145
Scroll Lock键
上面没有提到的:(都在大键盘)
VK_LWIN
91
左win键
VK_RWIN
92
右win键
VK_APPS
93
右Ctrl左边键,点击相当于点击鼠标右键,会弹出快捷菜单
186
;(分号)
187
=键
188
,键(逗号)
189
-键(减号)
190
.键(句号)
191
/键
192
`键(Esc下面)
219
[键
220
键
221
]键
222
‘键(引号)
delphi虚拟键码对应关键
VK_LBUTTON鼠标左键
VK_RBUTTON鼠标右键
VK_CANCEL控制+休息
VK_MBUTTON鼠标中键
VK_BACK Backspace键
VK_TAB Tab键
VK_CLEAR清除主要
VK_RETURN Enter键
VK_SHIFT Shift键
VK_CONTROL Ctrl键
VK_MENU Alt键
VK_PAUSE暂停关键
VK_CAPITAL Caps Lock键
VK_KANA可与输入法
VK_HANGUL可与输入法
VK_JUNJA可与输入法
VK_FINAL可与输入法
VK_HANJA可与输入法
VK_KANJI可与输入法
VK_CONVERT可与输入法
VK_NONCONVERT可与输入法
VK_ACCEPT可与输入法
VK_MODECHANGE可与输入法
VK_ESCAPE Esc键
VK_SPACE空间酒吧
VK_PRIOR页键
VK_NEXT下一页关键
VK_END END键
VK_HOME主页关键
VK_LEFT左箭头键
VK_UP向上键
VK_RIGHT右箭头键
VK_DOWN下箭头键
VK_SELECT选择关键
VK_PRINT打印键(键盘的具体)
VK_EXECUTE执行关键
VK_SNAPSHOT Print Screen键
VK_INSERT插入关键
VK_DELETE Delete键
VK_HELP帮助关键
VK_LWIN左Windows键(微软键盘)
VK_RWIN右Windows键(微软键盘)
VK_APPS应用关键(微软键盘)
VK_NUMPAD0 0键(数字键盘)
VK_NUMPAD1 1键(数字键盘)
VK_NUMPAD2 2键(数字键盘)
VK_NUMPAD3 3键(数字键盘)
VK_NUMPAD4 4键(数字键盘)
VK_NUMPAD5 5键(数字键盘)
VK_NUMPAD6 6键(数字键盘)
VK_NUMPAD7 7键(数字键盘)
VK_NUMPAD8 8键(数字键盘)
VK_NUMPAD9 9键(数字键盘)
VK_MULTIPLY多键(数字键盘)
VK_ADD添加键(数字键盘)
VK_SEPARATOR分离键(数字键盘)
VK_SUBTRACT减去键(数字键盘)
VK_DECIMAL小数点键(数字键盘)
VK_DIVIDE鸿沟键(数字键盘)
VK_F1 F1键
VK_F2 F2键
VK_F3 F3的关键
VK_F4 F4键
VK_F5 F5键
VK_F6 F6键
VK_F7 F7键
VK_F8 F8键
VK_F9 F9键
VK_F10 F10键关键
VK_F11 F11键
VK_F12 F12键
VK_F13 F13键
VK_F14 F14键
VK_F15 F15键
VK_F16 F16键
VK_F17 F17键
VK_F18 F18键
VK_F19 F19键
VK_F20 F20键
VK_F21 F21键
VK_F22 F22键
VK_F23 F23键
VK_F24 F24键
VK_NUMLOCK数Lock键
VK_SCROLL滚动Lock键
VK_LSHIFT左Shift键(仅用于GetAsyncKeyState和GetKeyState )
VK_RSHIFT右Shift键(仅用于GetAsyncKeyState和GetKeyState )
VK_LCONTROL左Ctrl键(仅用于GetAsyncKeyState和GetKeyState )
VK_RCONTROL右Ctrl键(仅用于GetAsyncKeyState和GetKeyState )
VK_LMENU左Alt键(仅用于GetAsyncKeyState和GetKeyState )
VK_RMENU右Alt键(仅用于GetAsyncKeyState和GetKeyState )
VK_PROCESSKEY工艺关键
VK_ATTN经办关键
VK_CRSEL CrSel关键
VK_EXSEL ExSel关键
VK_EREOF擦除EOF分析关键
VK_PLAY发挥关键
VK_ZOOM变焦关键
VK_NONAME保留以供将来使用
VK_PA1 PA1关键
VK_OEM_CLEAR清除主要标签数: 1 “ F14键
VK_F15 F15键
VK_F16 F16键
VK_F17 F17键
VK_F18 F18键
VK_F19 F19键
VK_F20 F20键
VK_F21 F21键
VK_F22 F22键
VK_F23 F23键
VK_F24 F24键
VK_NUMLOCK数Lock键
VK_SCROLL滚动Lock键
VK_LSHIFT左Shift键(仅用于GetAsyncKeyState和GetKeyState )
VK_RSHIFT右Shift键(仅用于GetAsyncKeyState和GetKeyState )
VK_LCONTROL左Ctrl键(仅用于GetAsyncKeyState和GetKeyState )
VK_RCONTROL右Ctrl键(仅用于GetAsyncKeyState和GetKeyState )
VK_LMENU左Alt键(仅用于GetAsyncKeyState和GetKeyState )
VK_RMENU右Alt键(仅用于GetAsyncKeyState和GetKeyState )
VK_PROCESSKEY工艺关键
VK_ATTN经办关键
VK_CRSEL CrSel关键
VK_EXSEL ExSel关键
VK_EREOF擦除EOF分析关键
VK_PLAY发挥关键
VK_ZOOM变焦关键
VK_NONAME保留以供将来使用
VK_PA1 PA1关键
VK_OEM_CLEAR清除主要