2017-02-20 7 views
1

以下のコードをコンソールEXEからWPFアプリケーションに送信したいとします。テストwpf exeには3つの入力テキストボックスがあります。しかし、次のコードは、オンラインの例とまったく同じで、非常にシンプルなように見えますが、フォームの最初のテキストボックスには記入されません。 WPFはStandardInputを受け入れますか?コンソールアプリケーションはWPFアプリケーションに対してProcess.StandaardInputを使用できますか?

ProcessStartInfo info = new ProcessStartInfo(); 
info.FileName = "C:\\temp\\testWPF.exe"; 
info.CreateNoWindow = false; 
info.WindowStyle = ProcessWindowStyle.Normal; 
info.RedirectStandardInput = true; 
//info.RedirectStandardOutput = true; 
info.RedirectStandardError = true; 
info.UseShellExecute = false; 

Process p = new Process(); 
p.StartInfo = info; 
p.Start(); 

p.StandardInput.WriteLine("Hello World"); 
p.StandardInput.Flush(); 
+0

_「WPFはStandardInputを受け入れますか?」_はい。しかし、StandardInputは期待どおりに動作しません。あるプログラムが別のプログラムのUIコントロールに書き込ませることで、解決しようとしている問題を正確に説明してください。 – CodeCaster

+0

標準入力からテキストボックスを埋めるためにwpfアプリで何をしますか? – Evk

+0

スタンドアロンの入出力ではなく実行パラメータで、アプリケーションに値を渡してからMain関数で値を取得します。テキストボックスにデータを入力する方法はあなた次第です。 – Gusman

答えて

0

WPFはStandardInputを受け入れていますか?

通常はありません。つまり、すべてのWindowsプロセスが実際に標準I/Oストリームをサポートすることができますが、GUIプログラムは一般的にを実行しません。を実行します。代わりにウィンドウメッセージで入力を受け取ります。標準のI/Oストリームを明示的にサポートしている奇妙なWPFプログラムを扱っていない限り、Process.StandardInputを使用することはできません。ストリームに書き込むことはできますが、誰も聞いていません。

さらに、複数のプロセス間自動化スキームの1つを使用したいと考えています。最も基本的なアプローチは、低レベルのメッセージ送信APIの1つ、例えば、 System.Windows.Forms.SendKeys(私はネイティブのSendMessage()関数&hellipを使用しません;それはあまりにも低レベルであり、個々のコントロールウィンドウのハンドルレベルで直接やり取りしているため、正しく動作するには多くの手間が必要です)。

さらに強力なメカニズムはUI Automationです。これはSystem.Windows.Automation namespaceを通じて.NET経由で利用できます。

+0

ありがとうございます。それはそれを行い、学ぶという私の願望を満足させました。私が必要としたのは、wpfアプリケーションがSendKeysを実行する前にSetForegroundWindow()だった間に小さな睡眠を追加することでした。私はUI Automationで後で読み上げます。 – user610342

関連する問題