最近要做一个程序,向另一个exe中自动输入相关数据。
为了实现自动输入用如下console 程序做了个demo,使用SendKeys函数实现。
首先要在console程序中添加下面的引用,才能使用SendKeys函数。
using System.Windows.Forms;
特殊字符的输入参照下表:
按键 | 代码 |
BACKSPACE | {BACKSPACE}, {BS}, 或 {BKSP} |
BREAK | {BREAK} |
CAPS LOCK | {CAPSLOCK} |
DEL or DELETE | {DELETE} 或 {DEL} |
DOWN ARROW | {DOWN} |
END | {END} |
ENTER | {ENTER}或 ~ |
ESC | {ESC} |
HELP | {HELP} |
HOME | {HOME} |
INS or INSERT | {INSERT} 或 {INS} |
LEFT ARROW | {LEFT} |
NUM LOCK | {NUMLOCK} |
PAGE DOWN | {PGDN} |
PAGE UP | {PGUP} |
PRINT SCREEN | {PRTSC} |
RIGHT ARROW | {RIGHT} |
SCROLL LOCK | {SCROLLLOCK} |
TAB | {TAB} |
UP ARROW | {UP} |
F1 | {F1} |
F2 | {F2} |
F3 | {F3} |
F4 | {F4} |
F5 | {F5} |
F6 | {F6} |
F7 | {F7} |
F8 | {F8} |
F9 | {F9} |
F10 | {F10} |
F11 | {F1} |
F12 | {F12} |
F13 | {F13} |
F14 | {F14} |
F15 | {F15} |
F16 | {F16} |
组合键参照下表:
按键 | 代码 |
Shift | + |
Ctrl | ^ |
Alt | % |
在控制台中Ctrl+v 粘贴没有实现,目前暂不确定原因。
SendKeys.SendWait("{a 5}"); //可以实现输入5个 a
SendKeys.SendWait("+a"); //可以实现输入大写A
SendKeys.SendWait("+(ab)"); //shift+ab 组合键SendKeys.SendWait("+ab"); //shift+a之后,按 b
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
SendKeys.SendWait("{a 5}");
System.Threading.Thread.Sleep(100);
Console.ReadKey();
SendKeys.SendWait("2");
System.Threading.Thread.Sleep(100);
Console.ReadKey();
SendKeys.SendWait("3");
System.Threading.Thread.Sleep(100);
Console.ReadKey();
SendKeys.SendWait("{ENTER}");
Console.ReadLine();
}
}
}
}
SendKeys.SendWait 会等待按键信息被完全执行之后再执行后续代码。
SendKeys.Send 不会判断按键信息是否执行完成。
第一版程序用的SendKeys.Send 发送按键信息,由于是循环调用发送多次,经常会发生按键没有完全发送就执行后续代码的情况,导致部分文字信息丢失。后来改成SendKeys.SendWait,循环多次时信息才能全部发送。