1. 概述
有些场景下,需要模拟键盘按键的动作,而不是真正地去敲击键盘,比如使用触屏或者使用遥控器去模拟输入,这就用到虚拟键盘按键这个功能,常用的有三种方式,一种是用SendKeys去模拟输入按键,第二种是Window API的keybd_event函数,第三种也是Window API的SendInput函数(包含了模拟鼠标)。在微软的官方文档中说,第三种SendInput函数已经取代第二种keybd_event函数(能正常使用)。我们先说第一种SendKeys的使用。
2. SendKeys用法
要使用SendKeys,就得先引用System.Windows.Forms,它有两个方法,一个是Send,一个是SendWait。Send常用来向本级应用程序发送虚拟按键信息,而SendWait是要等待按键消息被处理,常用于向其他活动应用程序发送虚拟按键信息。
比如想触发A键,直接写成SendKeys.Send(“a”),如果是连续触发多键,如1、2、3键,则写成SendKeys.Send(“123”)。键盘上的其他非可见字符的键该如何用呢?我们要记住有三个键特殊键的表示方式,Ctrl键是用" ^ “来表示,Shift是用“ + ”表示,Alt是用”%“表示,如Ctrl+C,应写成SendKeys.Send(”^C")。如果是要真正输出这三个字符,得放到花括号中,如SendKeys.Send(“{+}”)是输出"+“,同样输出左花括号则是SendKeys.Send(”{{}“),右花括号自然是SendKeys.Send(”{}}")。其他不可见字符的键参见下表:
键盘按键 | 输入值 |
---|---|
BACKSPACE | {BACKSPACE}、{BS} 或 {BKSP} |
BREAK | {BREAK} |
CAPS LOCK | {CAPSLOCK} |
DEL 或 DELETE | {DELETE} 或 {DEL} |
UP ARROW(上箭头键) | {UP} |
DOWN ARROW(下箭头键) | {DOWN} |
LEFT ARROW(左箭头键) | {LEFT} |
RIGHT ARROW(右箭头键) | {RIGHT} |
SCROLL LOCK | {SCROLLLOCK} |
TAB | {TAB} |
END | {END} |
ENTER | {ENTER} 或 ~ |
ESC | {ESC} |
HELP | {HELP} |
HOME | {HOME} |
INS 或 INSERT | {INSERT} 或 {INS} |
NUM LOCK | {NUMLOCK} |
PAGE DOWN | {PGDN} |
PAGE UP | {PGUP} |
PRINT SCREEN | {PRTSC}(保留,以备将来使用) |
F1 | {F1} |
F2 | {F2} |
F3 | {F3} |
F4 | {F4} |
F5 | {F5} |
F6 | {F6} |
F7 | {F7} |
F8 | {F8} |
F9 | {F9} |
F10 | {F10} |
F11 | {F11} |
F12 | {F12} |
数字键盘加号 | {ADD} |
数字键盘减号 | {SUBTRACT} |
数字键盘乘号 | {MULTIPLY} |
数字键盘除号 | {DIVIDE} |
3. 其他说明
如果不涉及复杂应用,我们就不必去调用Window API操作,SendKeys已经足够使用了。SendKeys的组合键使用,我们注意括号的使用,比如输入大写AB两个字符,需要按下Shift键后,再输入ab,再释放Shift键,这时就得把ab放在括号内,所以是这样的写法:SendKeys.Send(“+(ab)”),如果写成SendKeys.Send(“+ab”),实际输出的是Ab这两个字符,A是大写,b是小写了。另外注意同一键的重复输出,比如SendKeys.Send(“{a 5}”),表示输入5个a,即相当于连续敲击了5次a键。