PageDown キーを押すことをプログラムでコンソール アプリケーションに送信する必要があり、道に迷っています。MemoryStream を介して StreamReader を使用して Console.SetIn を試した後、34 (ConsoleKey enum の 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
後者の 2 つは、VB5 の SendKeys API から派生した「SendKeys」を使用することと同等です。残念ながら、後者の 2 つの方法では、ターゲット ウィンドウ (コンソール ウィンドウまたはそれ以外) がアクティブ ウィンドウであるか、その入力キューがアクティブ ウィンドウの入力キューに接続されている必要があります。
WriteConsoleInput が最も適切な方法であり、コンソール ウィンドウを表示またはアクティブにする必要がありません。また、コンソール ウィンドウの標準入出力への書き込みは、コンソール API やその他の入力インジェクション API (SendInput/keybd_event や VB/.NET SendKeys Wrapper など) を介して入力を送信することと同じではありません。
Windows コンソール アプリケーションは、真のパイプ ベースの実装ではないという点で、Unix または DOS 6.x (またはそれ以前) の「コンソール」アプリケーションと同じではありません。多くの場合、STDIN/STDOUT をいじっても効果はありません。一部のフレームワークは、STDIN/STDOUT ではなくコンソール API と統合されていることがあります。特に Windows PowerShell に存在する "オブジェクト パイプ" を考えると、STDIN は死んだと言っても過言ではありません。
または、CreateProcess API (または System.Diagnostics.Process) を作成し、独自の stdin/stdout/stderr ストリームを提供して、これらのストリームに対して Windows コンソールをバイパスすることもできますが、ターゲット アプリケーションが STDIN/STDOUT/STDERR を介して明示的に機能しない限り、役に立たない場合があります。 .
SendKeys.Send("{PGDN}");
StreamWriter と System.Windows.Forms.Keys.PageDown を使用できますか?