2013-12-17 40 views
0

我必須輸入一些數據到一個真正的舊dos應用程序,並希望自動執行此操作。首先我嘗試SendKeys,失敗後,我嘗試了InputSimulator(inputsimulator.codeplex.com)失敗。它可以在任何其他應用程序(甚至CMD ...),但不是我想要的應用程序...模擬dos應用程序的輸入

示例代碼,我用:

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,並輸入stdin?

EDIT2:正如Boluc Papuccuoglu指出stdin方法不起作用。那麼無論如何要編寫一個工作按鍵模擬函數?

編輯3:與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」。編輯4:無論我給keybd_event哪個虛擬鍵,他總是寫「a」而沒有其他的東西。似乎我不得不這樣做老式aka手動方式。編輯5:所以是的,手動輸入被吸了,所以我決定給autoit一個嘗試,它的工作原理。 WTF?也許有人可以解釋我自動將密鑰發送到程序的方式與sendkeys,inputsimulator和keybd_event不同。

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

1

不幸的是,stdin方法可能不起作用。從屏幕截圖中我可以看到,應用程序最有可能在按鍵上操作,而不是輸入流的內容。

+0

如果使用外部實用程序,則AutoIT或AutoHotKey可以模擬鍵盤輸入。 – Stephan