我需要以編程方式發送一個Page Down鍵按下到控制檯應用程序,我迷路了。 我試圖通過一個MemoryStream的StreamReader Console.SetIn,然後寫了34(ConsoleKey枚舉中的下一頁)並沒有發生任何事情。如何在控制檯輸入緩衝區中寫入'PAGE DOWN'?
回答
SendKeys.Send("{PGDN}");
你可以使用StreamWriter和System.Windows.Forms.Keys.PageDown嗎?
您可以使用「WriteConsoleInput」函數(Windows API)直接寫入控制檯。或者,「SendKeys」,「keybd_event」或「SendInput API」都應該工作,但需要控制檯處於前臺。
http://msdn.microsoft.com/en-us/library/ms687403(VS.85).aspx - WriteConsoleInput
msdn.microsoft.com/en-us/library/ms646304(VS.85).aspx - keybd_event
msdn.microsoft.com/en-us/library/ms646310 (VS.85).aspx - SendInput
後兩者相當於使用「SendKeys」,它是從VB5s SendKeys API派生的。不幸的是,後兩種方法要求目標窗口(控制檯窗口或其他)爲活動窗口,或者將其輸入隊列附加到活動窗口的輸入隊列。
WriteConsoleInput將是最合適的方式,從而避免需要使COMnsole窗口可見或活動。此外,在控制檯窗口中寫入標準輸入/輸出與通過控制檯API或其他輸入注入API(例如SendInput/keybd_event或VB/.NET SendKeys包裝器)發送輸入不同。
Windows控制檯應用程序與Unix或DOS 6.x(或更早版本)的「控制檯」應用程序不同,因爲它不是真正的基於管道的實現,在很多情況下,使用STDIN/STDOUT進行操作沒有效果,並且您可能會發現某些框架與Console API集成,而不是STDIN/STDOUT。人們幾乎可以說STDIN已經死了,尤其是考慮到Windows PowerShell中存在的「對象管道」。
或者,您可以CreateProcess API(或System.Diagnostics.Process)並提供您自己的stdin/stdout/stderr流並繞過這些流的Windows控制檯,但除非目標應用程序通過STDIN/STDOUT/STDERR顯式工作它可能沒有幫助。
- 1. 如何從Vim緩衝區寫入控制檯?
- 2. 動態大小輸入緩衝區控制檯遊戲在C
- 3. 如何在緩衝區控制檯輸出中輸出?
- 4. 如何關閉輸入/輸出緩衝區中的輸入/輸出緩衝區
- 5. 控制檯緩衝區以外的寫入進度顯示
- 6. 如何沖洗輸入緩衝區? (C)
- 7. 如何將緩衝區寫入緩衝區
- 8. 如何用緩衝區刪除輸入流的緩衝區?
- 9. 如何編寫ANSI C控制檯屏幕緩衝區?
- 10. 如何寫入OpenGL深度緩衝區
- 11. C++寫入int緩衝區
- 12. 部分緩衝區寫入
- 13. 控制檯中的屏幕緩衝區
- 14. Python扭曲 - 如何在Telnet或SSH中控制緩衝/無緩衝輸入?
- 15. 如何在fasm中寫入控制檯?
- 16. pyserial輸入緩衝區
- 17. 清除輸入緩衝區
- 18. 在控制檯中輸入輸入
- 19. 如何在VBNET中讀取控制檯緩衝區?
- 20. 你如何寫入緩衝區,然後寫入文件
- 21. 如何將寫入緩衝區添加到在io.h中定義的寫入中
- 22. 程序在此控制檯中寫入時在控制檯中寫入
- 23. fftwf_execute_dft_c2r寫入輸入緩衝器
- 24. 需要對控制檯緩衝區和控制檯輸出進行響應
- 25. 寫入PHP輸出緩衝區,然後從緩衝區下載CSV
- 26. 使用緩衝寫入器在新文件中寫入輸出
- 27. 錯誤:無法將輸入寫入OpenMAX緩衝區
- 28. 試圖填充緩衝區,同時緩衝區寫入通道
- 29. 用臨時緩衝區使用ofstream寫入臨時緩衝區
- 30. 如何在GLSL中寫入/防止寫入OpenGL深度緩衝區
確保您完全符合條件或添加了對System.Windows.Forms的引用。它在控制檯應用程序中起作用。 – phoebus 2009-09-25 04:20:12