模拟按下某快捷键:keybd_event使用方法

摘要:
keybd_event是函数功能:该函数合成一次击键事件。Windows提供了一个模拟键盘API函数Keybd_event(),使用该函数可以相应的屏蔽键盘的动作。Keybd_event()函数能触发一个按键事件,也就是说会产生一个WM_KEYDOWN或WM_KEYUP消息。

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'

免责声明:文章转载自《模拟按下某快捷键:keybd_event使用方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇x86汇编指令(push,pop,call,ret)杂记3:VS使用Web Deploy一键发布网站到服务器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PHP 微信机器人 Vbot 结合 Laravel 基础入门及实例

新来了项目,需要能监听指定微信群的消息并进行转发。基于 PHP 7 的 web 微信机器人 Vbot 可以满足需求。Vbot 本质上就是实现了登录网页版微信来进行自动回复、群管理等等操作。 github 地址:https://github.com/hanson/vbot,官网地址:http://create.hanc.cc/vbot/。 安装 环境要求:...

inno setup读取注册表遇到的一个坑

一、背景       目前,公司针对PR开发的一个插件需要发布到64位系统上。该插件包括一个prm格式的文件和若干个DLL文件。其中,prm文件需要复制到PR公共插件目录下,DLL需要复制到Windows系统目录中去,这样插件才能正常的工作。公司现在要求发布插件时制作一个安装包,让用户点击安装包后自动将插件相关文件拷贝到相应目录去。本来用inno setu...

# AMQP协议 0-9-1 简介

目录 AMQP是什么AMQP 0-9-1 模型简介 交换机和交换机类型 默认交换机 直连交换机 扇型交换机 主题交换机 头交换机 队列 队列名称 队列持久化 绑定 消费者 消息确认 拒绝消息 Negative Acknowledgements 预取消息 消息属性和有效载荷(消息主体) 消息确认 其他 AMQP 0-9-1 方法...

Feign入门实例

此案例为替换原有的消费者,注册中心和消息提供者延用之前的 注册中心的案例   https://www.cnblogs.com/songlove/p/14793575.html 消息提供者:https://www.cnblogs.com/songlove/p/14794021.html 先创建一个工程,引用maven控制 ,比着之前的消费者的项目增加了一个f...

Disruptor与Netty实现百万级(十)

实体对象: import java.io.Serializable; public class TranslatorData implements Serializable { private static final long serialVersionUID = 8763561286199081881L; private St...

【WinForm程序】注册热键快捷键切换

重写DefWndProc事件 #region Window 消息捕获 const int WM_COPYDATA = 0x004A; public structCOPYDATASTRUCT { publicIntPtr dwData; public i...