在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清除主要