如何将'PAGE DOWN'写入控制台输入缓冲区?

时间:2009-09-25 03:59:02

标签: .net console-application

我需要以编程方式将Page Down按键发送到控制台应用程序,我就迷路了。 我在MemoryStream上尝试了Console.SetIn和一个StreamReader,然后编写了34(在ConsoleKey枚举中向下翻页)并没有发生任何事情。

3 个答案:

答案 0 :(得分:1)

SendKeys.Send("{PGDN}");

答案 1 :(得分:1)

您可以使用“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将是最合适的方式,避免使COnsole窗口可见或活动。此外,在Console窗口上写入标准输入/输出与通过Console API或其他输入注入API(例如SendInput / keybd_event或VB / .NET SendKeys Wrapper)发送Input不同。

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显式工作,否则可能没有用。

答案 2 :(得分:0)

您可以使用StreamWriter和System.Windows.Forms.Keys.PageDown吗?