那麼,我似乎已經找到了我自己的問題的答案。 這是一個真正的「拼湊在一起」的解決方案,但它的工作原理 - 並且對於我正在構建的應用程序的所有意圖和目的而言,並不重要。
所以,我所做的是使用兩個名爲
static extern bool ShowWindow(IntPtr WindowHandle, int nCmdShow);
static extern bool SetForegroundWindow(IntPtr WindowHandle);
WinAPI的函數的第一個可用於顯示/分別改變的nCmdShow爲1和0隱藏的窗口。另一個將窗口(由WindowHandle決定)放在前面。將這兩者結合在一起,我可以通過編程方式將控制檯窗口提前,做一個簡單的SendKeys.Send();操作,然後再次隱藏它。現在
// Use a WIN API command to bring the command line to front
SetForegroundWindow(workerProcess.MainWindowHandle);
// Send a keystore to re-display the STATUS of the worker
SendKeys.Send("s");
// Hide the window again.
ShowWindow(workerProcess.MainWindowHandle, 0);
,它是一個真正的雜牌組裝電腦的工作,但它能夠完成任務。一個潛在的缺陷是如果用戶正在使用計算機來處理其他事情,並且在窗口處於活動狀態並使用'q'時,將在10000000時刻指出1 - 它將退出工作程序。但該應用程序的目的是在專用機器上使用,這些機器很可能連監視器,鍵盤或鼠標都連接到它們上面,所以這不是問題。
感謝所有回答的人,因爲您以這樣或那樣的方式引導我走向正確的解決方案。
是你寫的命令行應用程序一個(或至少具有源代碼)?如果是這樣,我會將你想要重用的位重構到GUI和命令行工具使用的單獨庫中。 – 2011-12-24 20:58:26
您是否確定在使用Process'StandardInput時沖洗流? – jclozano 2011-12-24 21:00:04
@JonSkeet:呵呵,如果我有奢侈的源代碼,我不會問這個問題:P我只是更改應用程序以更好地工作。 是的,我通過調用Flush()命令完成FLUSH流。沒有幫助。 – Iv4n 2011-12-24 21:24:42