Guten Abend, Ich wollte fragen ob jemand weiß wie man, eine Zeile aus einer breits ausgeführten (laufenden Prozess) Konsolenanwendung einließt? Also z.B. Ich hab nen Hello World Programm was läuft und Hallo World ausgibt. Nun möchte ich die Zeile mit einem neuen Programm Einlesen und auch ausgeben z.B.. Kann mir bitte einer helfen? MfG
Mittels der Klasse System.Diagnostics.Process kann man die Standardausgabe auf einen Stream Umleiten. Ich bin mir nicht sicher, aber ich glaube das Umleiten funktioniert nur wenn du den Prozess (mittels dieser Klasse) aus deinem Programm heraus startest. Man kann sich zwar mittels der statischen Methoden der Process-Klasse in einen Laufenden Prozess reinhängen, allerdings muss man das Umleiten der Standardein-/Ausgabe in StartupInfo angeben. Daher meine Vermutung, dass es mit bereits laufenden Prozessen nicht funktioniert. Wie man die Ausgabe von einem Laufenden Prozess umleiten kann weis ich leider auch nicht. greets
Weil ich heute gut gelaunt bin ;)
1 | |
2 | using System; |
3 | using System.Diagnostics; |
4 | using System.Windows.Forms; |
5 | namespace Test { |
6 | class Form1 : Form { |
7 | TextBox m_tbTest; |
8 | |
9 | public Form1() { |
10 | m_tbTest = new TextBox(); |
11 | m_tbTest.Multiline = true; |
12 | m_tbTest.Dock = DockStyle.Fill; |
13 | Controls.Add(m_tbTest); |
14 | //~~~~~~~~~~~~~~~~~~~~~~~~~~
|
15 | Process p = new Process(); |
16 | p.StartInfo.FileName = "Test.exe"; |
17 | p.StartInfo.RedirectStandardOutput = true; |
18 | p.StartInfo.UseShellExecute = false; |
19 | p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived); |
20 | p.Start(); |
21 | p.BeginOutputReadLine(); |
22 | }
|
23 | |
24 | private void p_OutputDataReceived(object sender, DataReceivedEventArgs e) { |
25 | if (this.InvokeRequired) { |
26 | this.BeginInvoke(new DataReceivedEventHandler(p_OutputDataReceived), sender, e); |
27 | } else { |
28 | m_tbTest.Text += e.Data + Environment.NewLine; |
29 | }
|
30 | }
|
31 | |
32 | static void Main(string[] args) { |
33 | Application.Run(new Form1()); |
34 | }
|
35 | }
|
36 | }
|
Bei dem Beispiel muss das Zielprogramm aus diesem Programm heraus gestartet werden. Wie man von einem laufenden Prozess die Standardausgabe umleitet weis ich, wie bereits erwähnt, leider auch nicht. Fallst du trotzdem in diese Richtung weiter recherchieren willst könnten dir Folgende Methoden hilfreich sein:
1 | Process p1 = Process.GetProcessById(...); |
2 | Process[] pArr1 = Process.GetProcesses(); |
3 | Process[] pArr2 = Process.GetProcessesByName(...); |
Damit kannst du dich an einen Laufenden Prozess ranhängen. Eventuell kannst du mittels WinAPI und dem hieraus erhaltenen Process-Handle die Standardausgabe auch nach dem Start noch umleiten. greets PS: In der Zwischenzeit hättest du ruhig ein wenig Eigeninitiative zeigen können: mit dem Stichwörtern Process+MSDN finden sich genaue Beschreibungen + Beispiele
> Weil ich heute gut gelaunt bin ;)
Boah, sehr schönes Beispiel. Hoffe der Hilfesuchende weiss es ebenfalls
zu schätzen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.