keybd_event()

模拟按键操作常用的方式有俩种:

使用winio模拟键盘硬件扫描码;
使用keybd_event函数。

第一种可能相对复杂,所以我并没有使用,不过想要弄明白它的原理,可以参考这篇文章:WinIo驱动级键盘模拟编程

因为我使用的第二种,所以我重点记录第二种怎么用。 
Windows提供了一个模拟键盘API函数Keybd_event(),该函数可以合成一次击键事件,系统可以使用这种合成的击键事件来产生WM_KEYUP或者WM_KEYDOWN消息。 
该函数原型如下:

  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

  );
1
2
3
4
5
6
7
8
9
10
11
该函数的四个参数分别为:

bVk:为按键的虚拟键值,键码值必须在1~254之间,例如F10的键值为121;
bScan:定义该键的硬件扫描码;
dwFlags:定义函数操作的各个方面的一个标志位集;
定义与击键相关的附加的32位值;

具体点,bVk为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab;bScan一般不用设置,用0代替就行。你是不是不明白键盘的虚拟码和硬件扫描码的区别,好,看这里键盘的扫描码、虚拟码。dwFlags应用程序可使用如下一些预定义常数的组合设置标志位。 
  KEYEVENTF_EXTENDEDKEY:若指定该值,则扫描码前一个值为OXEO(224)的前缀字节。 
  KEYEVENTF_KEYUP:若指定该值,该键将被释放(2);若未指定该值(0),该键将被按下。 
  dwFlags一般也是置0即可。

好了,弄明白系统提供的这个函数的功能以及参数了之后看看在C#中怎么用。比如模拟按下F10:

    [DllImport("user32.dll"),EntryPoint = "keybd_event"]
    public static extern void keybd_event(
        byte bVk,
        byte bScan,
        int dwFlags,     //这里为整数类型 0为按下,2为释放
        int dwExtraInfo  
    );

    public void F10Clic(){
        //模拟F10按键
        keybd_event((byte)Keys.F10,0,0,0); //按下F10
        keybd_event((byte)Keys.F10,0,2,0); //按下后松开F10
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
好了,我的问题解决了。

最后附上常用的键值码表:

字母和数字键     数字小键盘的键       功能键         其它键 
键   键码     键   键码       键   键码     键      键码 
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  
--------------------- 
作者:魏军强 
来源:CSDN 
原文:https://blog.csdn.net/u014434080/article/details/50838117 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值