C# 使用keybd_event()函数模拟键盘按键

今天碰到了一个需求,在一体机上按F10关闭一个应用。但一体机上如果不带键盘的话。很难按出F10.所以我必须用软件的方式模拟按下F10.于是查阅各种资料。总结出,模拟按键操作常用的方式有俩种:

  1. 使用winio模拟键盘硬件扫描码;
  2. 使用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

  );

该函数的四个参数分别为:

  • 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
    }

好了,我的问题解决了。

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

字母和数字键     数字小键盘的键       功能键         其它键
键   键码     键   键码       键   键码     键      键码
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  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值