我需要以编程方式将 Page Down 按键发送到控制台应用程序,但我迷路了。我在 MemoryStream 上使用 StreamReader 尝试了 Console.SetIn,然后写了 34(在 ConsoleKey 枚举中的 Page Down),但什么也没发生。
3 回答
您可以使用 Windows API 的“WriteConsoleInput”函数直接写入控制台。或者,“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 将是最合适的方式,无需让 COnsole 窗口可见或处于活动状态。此外,在控制台窗口上写入标准输入/输出与通过控制台 API 或其他输入注入 API(例如 SendInput/keybd_event 或 VB/.NET SendKeys Wrapper)发送输入不同。
Windows 控制台应用程序与 Unix 或 DOS 6.x(或更早版本)“控制台”应用程序不同,因为它不是真正的基于管道的实现,在许多情况下,使用 STDIN/STDOUT 将没有任何效果,并且您可能会发现某些框架与控制台 API 而非 STDIN/STDOUT 集成。几乎可以说 STDIN 已死,尤其是考虑到 Windows PowerShell 中存在的“对象管道”。
或者,您可以 CreateProcess API(或 System.Diagnostics.Process)并提供您自己的 stdin/stdout/stderr 流并绕过这些流的 Windows 控制台,但同样除非目标应用程序通过 STDIN/STDOUT/STDERR 明确工作,否则它可能无济于事.
SendKeys.Send("{PGDN}");
你可以使用 StreamWriter 和 System.Windows.Forms.Keys.PageDown 吗?