ShellExecuteEx verwenden und Standard-In / Out / Err erfassen

8

Ich verwende ShellExecuteEx , um einen Befehl in C auszuführen. Gibt es eine Möglichkeit, ShellExecuteEx zu verwenden und standard in / out / err zu erfassen?

Hinweis: Ich möchte CreateProcess nicht verwenden.

    
alrashedf 22.01.2009, 13:40
quelle

5 Antworten

2

Wie von pilif und Bob erwähnt, müssen Sie CreateProcess verwenden.

Wenn Sie Code haben möchten, der alles für Sie bereitstellt, habe ich eine Klasse für genau dieses Problem unter:

Ссылка .

Die Klasse ( kGUICallThread ) behandelt Linux-, macOS- und Windows-Versionen. Der Code ist lizenziert LGPL.

    
KPexEA 22.01.2009, 23:39
quelle
5

Ich benutze, um das Problem wie Sie zu finden.

Angenommen, Sie möchten die Ausgabe von STDOUT, die mit dem Befehl dir generiert wurde, erfassen und die aufgenommene Datei in out.txt speichern.

  1. Verwenden Sie den Texteditor und geben Sie dir & gt; out.txt und speichern Sie sie mit mybat.bat (* .bat, nicht * .txt)

  2. Geben Sie in Ihrem c / c ++ Programm WinExec ("mybat.bat", SW_HIDE); ein und führen Sie Ihre Anwendung aus.

  3. Öffnen Sie die out.txt , um den Namen der Ordner und Dateien im aktuellen Verzeichnis anzuzeigen.

Sie können auch ausführbare Dateien (* .exe) auf die gleiche Weise wie folgt ausführen.

xxx.exe & gt; out.txt

Ich hoffe, es kann dir helfen. Entschuldigung, mein Englisch ist wirklich nicht gut.

    
Santi 02.03.2009 06:33
quelle
4

Nein. Der einzige Weg dies zu tun, ist CreatePipe und CreateProcess zu verwenden. Siehe den MSDN-Artikel hier

    
Bob Moore 22.01.2009 13:52
quelle
4

Das ist nicht möglich. ShellExecute ( Ex ) führt die Anwendung grundsätzlich im Kontext der Shell aus - Sie tun also im Prinzip, was der Explorer tut.

Das Aufzeichnen von STDIN und STDOUT ist etwas, was die Shell im Allgemeinen nicht tut. Sie müssen die CreateProcess route aufrufen (was immerhin ShellExecute schließlich aufruft, wenn die auszuführende Datei ein Programm ist und Das Verb ist 'offen'.)

    
pilif 22.01.2009 13:44
quelle
1

CreateProcess verwenden die meisten Leute.

Sie sollten auch die Verwendung von _popen

in Betracht ziehen

Ссылка

    
Jason 30.11.2009 19:46
quelle

Tags und Links