2017-02-20 1 views
1

Ich möchte Daten von einer Konsole exe, Code unten, an eine WPF App senden. Der Test wpf exe hat 3 Eingabefelder. Aber der folgende Code, der direkt aus Online-Beispielen stammt und der sehr einfach zu sein scheint, füllt das erste Textfeld auf dem Formular nicht aus - es bleibt leer. Akzeptiert WPF StandardInput?Kann Konsole App Process.StandaardInput gegen WPF app?

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

_ "Akzeptiert WPF standardInput?" _ - ja, aber StandardInput tut nicht, was Sie erwarten. Bitte erläutern Sie, welches Problem Sie genau lösen möchten, indem Sie ein Programm in die UI-Steuerelemente eines anderen Programms schreiben lassen. – CodeCaster

+0

Also, was machst du in WPF App, um Textbox von Standardeingabe zu füllen? – Evk

+0

Was Sie wollen, ist nicht standardmäßige Eingabe/Ausgabe, sondern Ausführungsparameter, übergeben Sie die Werte als Parameter an die App und dann abrufen sie auf der Hauptfunktion, es liegt an Ihnen, wie Sie die Textfelder mit den Daten füllen. – Gusman

Antwort

0

Ist WPF StandardInput akzeptieren?

Normalerweise nicht, nein. Das heißt, jeder Windows-Prozess kann tatsächlich die Standard-I/O-Ströme unterstützen, aber GUI-Programme tun normalerweise nichts mit ihnen. Sie werden stattdessen über Fenstermeldungen empfangen. Wenn Sie also nicht mit einem WTF-Programm für ungeraden Ball arbeiten, das explizit Unterstützung für die Standard-I/O-Streams hinzugefügt hat, wird die Verwendung von Process.StandardInput nicht funktionieren. Sie können in den Stream schreiben, aber niemand hört zu.

Wahrscheinlich möchten Sie eines der verschiedenen Interprozess-Automatisierungsschemata verwenden. Der rudimentärste Ansatz wäre die Verwendung einer der Low-Level-Nachrichten-sendenden APIs, z. System.Windows.Forms.SendKeys (Ich würde nicht die native SendMessage() Funktion verwenden & hellip; es ist zu Low-Level und erfordert eine Menge fiddling, um richtig zu arbeiten, weil Sie direkt auf der Ebene des einzelnen Kontrollfensters Handle interagieren).

Ein robusterer Mechanismus wäre UI Automation. Dies ist via .NET über die System.Windows.Automation namespace verfügbar.

+0

Danke. Das hat es getan und meinen Lernwunsch befriedigt. Der einzige Trick, den ich brauchte, war, einen kleinen Schlaf hinzuzufügen, während die wpf-App SetForegroundWindow() war, bevor ich SendKeys ausführte. Ich werde später auf UI Automation nachlesen. – user610342