基于keybd_event函数的模拟键盘输入
来源:互联网 发布:amv格式视频软件 编辑:程序博客网 时间:2024/04/27 08:50
下面以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_LBUTTON011鼠标的左键VK_RBUTTON022鼠标的右键VK-CANCELdelphi虚拟键码对应关键
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清除主要
- 基于keybd_event函数的模拟键盘输入
- keybd_event函数模拟键盘输入的问题
- 利用Keybd_event()函数模拟键盘输入
- 使用keybd_event模拟键盘输入
- keybd_event模拟键盘输入
- 模拟键盘输入 : SendMessage, keybd_event, PostKeybdMessage
- 模拟键盘输入 : SendMessage, keybd_event, PostKeybdMessage
- 模拟键盘输入 : SendMessage, keybd_event, PostKeybdMessage
- 模拟按键函数Keybd_event
- VC++模拟键盘输入(keybd_event() 、 PostMessage() /SendMessage()、SendInput())详解
- VC++模拟键盘输入(keybd_event() 、 PostMessage() /SendMessage()、SendInput())详解
- 模拟键盘API函数Keybd_event用法
- C# 使用keybd_event()函数模拟键盘按键
- 模拟键盘API函数Keybd_event用法
- keybd_event函数
- 【C语言】keybd_event 函数,实现模拟按键操作
- SendInput模拟键盘输入的问题
- 用keybd_event & mouse_event & setcursorpos 摸拟键盘输入以及鼠标的移动。
- 字符串相关
- 【FFMPEG】【ARM-Linux开发】fmpeg安装第三方编码器(encoder)库,ffmpeg编码h264(完)
- 芝麻
- [转]在VC中彻底玩转Excel
- Type interface com.hk.ssm.mapper.StudentMapper is not known to the MapperRegistry.
- 基于keybd_event函数的模拟键盘输入
- 文章标题
- mac升级后导致apache无法使用
- JS单页面应用实现前端路由(hash)
- BMC IPMI常用命令
- (笔记)Spring MVC学习指南_Spring MVC介绍
- Python 总结:进阶1
- Mysql连接查询
- fork,vfork,clone