2

自分の WPF アプリケーションの標準入力ストリームから読み取る方法を見つけようとしていますが、ストリームを取得する方法が見つかりません。それを行う標準的な方法は、

Console.ReadLine()

すぐに Null(Nothing) を返します。これはコンソール アプリケーションではなく、コンソール ウィンドウが開いていないためだと思います。WPF アプリケーションで標準入力から読み取るにはどうすればよいですか?

いくつかの背景: 外部デバイス (磁気カード リーダー) から送信されたテキストを読み込もうとしています。このデバイスは、現在フォーカスされているアプリケーションの stdin にデータを送信します。TextBox にフォーカスを設定し、必要に応じてそこからデータを読み取ることができますが、可能であれば、可能性のある多くの問題を回避するためにデータを直接読み取ることをお勧めします。

編集:ダニエル・プラットが私の元の問題を解決したとしても、標準入力から読み取る方法を理解することはまだいいでしょう. あなたがそれに答えることができれば、受け入れられた答えを変更します。

4

3 に答える 3

3

この種のデバイスは通常キーボードとして機能するという印象を受けました(これにより、元の質問の TextBox に関する部分が理にかなっています)。いくつかのキーボードイベントをフックするだけでよいと思います。

于 2009-03-17T19:53:31.607 に答える
0

stdin/stdout ストリームから読み書きするための .NET フレームワーク コードを見ると、実際にはコンソール ウィンドウに依存するものは何もないように見えます。このコードは、さまざまなネイティブ Win32 呼び出しを単純に利用しているように見えます。まず、GetStdHandle を呼び出して標準の入出力ストリームのハンドルを取得し、Win32 ReadFileNativeおよびWriteFileNative関数のマネージド ラッパーである__ConsoleStreamクラスを作成します。本当に、動作しない理由はわかりません...コードをメインに直接配置したときに、コンソールを使用して標準入力から読み取る呼び出しが成功するかどうかを確認する価値がありますConsole.ReadLine関数。ここでの問題は、Windows によって認識されるアプリケーションの種類に関係している可能性があると思いますが、非コンソール アプリが stdin から stdout への読み取り/書き込みを制限する必要がある理由がわかりません。他の考えられる原因は、呼び出しを行っているスレッドである可能性があります。とにかく、これをテストして、結果を教えてください。それでもうまくいかない場合は、解決策に興味があるので、私自身のテストをいくつか試みます。

于 2009-03-17T20:35:03.117 に答える