Shell Prozess' standard-Ausgabe Lesen, die in Visual Basic 6
Lassen Sie mich zuerst sagen, dass ich kein Visual Basic 6 expert...
Mein Bedürfnis ist:
- starten von VB6 client-code eine exeternal .exe-Datei
- warten, bis der Prozess abgeschlossen ist, und - während der Ausführung - Lesen Sie die Nachrichten aus Ihrer standard-Ausgabe "on the fly" (also, dass kann ich drucken Sie es auf einem text-eingereicht widget oder ähnliches).
Frage ich mich, ob es überhaupt möglich ist, das zu tun, VB6...nach langer Suche im Internet habe ich nicht mit etwas kommen. Gefunden eine Menge Beispiele, wie die Shell
Funktion, aber es scheint, mich zu zwingen, Lesen stdout auf einmal, wenn der Prozess der' Ausführung ist vorbei, aber ich möchte eine Umfrage der Prozess für die "frische" Nachrichten, sobald Sie verfügbar sind.
Den code-snippets/Anregungen/Verweise zu schätzen wissen.
Vielen Dank im Voraus!
Sie verwenden das falsche Werkzeug für diese Aufgabe. Zeit zu aktualisieren, um VB.NET so können Sie Prozess.BeginOutputReadLine().
Ich weiß...(ich würde wirklich lieben zu tun, die in Java oder Python), Aber ich bin gezwungen zu tun, dass die Verwendung von VB6, für den moment.
und claudio, Sie könnten schreiben einer DLL in VB.Net und rufen Sie es von VB6 über COM-interop. Vorausgesetzt, die äußeren Zwänge dies erlauben.
Ich weiß...(ich würde wirklich lieben zu tun, die in Java oder Python), Aber ich bin gezwungen zu tun, dass die Verwendung von VB6, für den moment.
und claudio, Sie könnten schreiben einer DLL in VB.Net und rufen Sie es von VB6 über COM-interop. Vorausgesetzt, die äußeren Zwänge dies erlauben.
InformationsquelleAutor csparpa | 2011-09-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
CreatePipe()
eine anonyme pipe erstellen, die übergeben werden könnenCreateProcess()
.Sie können dann aus dieser pipe als erforderlich (entweder über polling oder überlappende/async I/O.
Dies sollte Ihnen genug info zu finden, ein gutes Beispiel.
können Sie einige code, den man finde ich unter dem link nicht funktioniert
InformationsquelleAutor Deanna
Können Sie immer Exec-Methode von WshShell um die Arbeit zu tun.
Ich lieber eine home-grown-API-basierte Lösung cExec.cls viel einfacher als Bob Riemersma Benutzer-Steuerelement (aber nicht so vielseitig).
InformationsquelleAutor wqw
Können Sie auch erstellen Sie eine batch-Datei, die alle Befehle, die Sie ausführen müssen, und dann von VB6 aufrufen der batch-Datei durch ausführen
sobald Sie ausgeführt wird, dann öffnen
OutputFileName.txt
und finden Sie alle Nachrichten und die Ausgabe, die generiert wurde, während der batch-Prozess. Sie können dann Lesen Sie es in VB6 in eine einfacheopen "filename" for input as #1
Beachten Sie auch, dass wenn du mit einem doppelten GreaterThan Symbole, die die Ausgabe-Datei wird nicht überschrieben werden jedes mal, wenn die batch ausgeführt wird. Stattdessen wird es angehängt mit den neuen Zeilen der Ausgabe.
InformationsquelleAutor Ahmad
Hier ist die Funktion, die Sie möchten. Die Ausübung der Deklaration der API (CreatePipe, CreateProcessA CloseHandle, etc), die Typen (PROCESS_INFORMATION, STARTUPINFO, SECURITY_ATTRIBUTES) die Konstanten (STARTF_USESTDHANDLES, STARF_USESHOWWINDOW, etc) bleibt dem Leser selbst überlassen.
InformationsquelleAutor Kris Erickson