我必须将一些数据输入到一个非常古老的dos应用程序中,并希望自动执行此操作。首先我尝试了SendKeys,失败了,之后我尝试了输入模拟器(inputsimulator.codeplex.com)也失败了。它适用于任何其他应用程序(甚至cmd ...),但不适用于我想要的应用程序......
我使用的示例代码:
InputSimulator.SimulateTextEntry("test");
InputSimulator.SimulateKeyDown(VirtualKeyCode.F1);
InputSimulator.SimulateKeyUp(VirtualKeyCode.F1);
我也用SimulateKeyPress尝试过,结果相同:( 有人可以给我一些提示吗?
目标系统:Win XP
应用程序的屏幕: http://images.devs-on.net/Image/wxhZouyZdwemgTRp-Bereich.png
EDIT1:是否可以从我的应用程序启动.bat并输入输入?
EDIT2:正如Boluc Papuccuoglu所指出的那样,stdin方法不起作用。那么无论如何编写一个工作键击模拟函数?
EDIT3:使用keybd_event我可以写入应用程序。但是......我用
试了一下public const int A = 0x41;
public const int C = 0x43;
keybd_event(A, 0, KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(A, 0, KEYEVENTF_KEYUP, 0);
System.Threading.Thread.Sleep(1000);
keybd_event(C, 0, KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(C, 0, KEYEVENTF_KEYUP, 0);
但我只得到2次“a”。
EDIT4:无论我给keybd_event提供哪个虚拟密钥,他总是写“a”而不是别的。好像我必须采用老式的手工方式。
EDIT5:所以是的,手动输入很糟糕,所以我决定尝试自动尝试它的工作原理。 WTF?也许有人可以解释一下自动向程序发送密钥的方式与sendkeys,inputsimulator和keybd_event不同。
答案 0 :(得分:1)
不幸的是,stdin方法可能不起作用。从我在屏幕截图中看到的,应用程序最有可能作用于按键,而不是输入流的内容。