今天碰到了一个需求,在一体机上按F10关闭一个应用。但一体机上如果不带键盘的话。很难按出F10.所以我必须用软件的方式模拟按下F10.于是查阅各种资料。总结出,模拟按键操作常用的方式有俩种:
- 使用winio模拟键盘硬件扫描码;
-
使用keybd_event函数。
第一种可能相对复杂,所以我并没有使用,不过想要弄明白它的原理,可以参考这篇文章:WinIo驱动级键盘模拟编程
因为我使用的第二种,所以我重点记录第二种怎么用。
Windows提供了一个模拟键盘API函数Keybd_event(),该函数可以合成一次击键事件,系统可以使用这种合成的击键事件来产生WM_KEYUP或者WM_KEYDOWN消息。
该函数原型如下:
该函数的四个参数分别为:
- 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:
好了,我的问题解决了。
最后附上常用的键值码表:
字母和数字键 数字小键盘的键 功能键 其它键
键 键码 键 键码 键 键码 键 键码
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
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!