您的位置:首页 > 编程语言 > C#

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

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

使用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

  );


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

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  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  模拟键盘按键