![]() |
Shellexecute Ergebnis im Memo Objekt ausgeben
Hallo,
ich bin seit ein paar Wochen neu mit Delphi unterwegs, dachte eigentlich dass was ich machen möchte ist einfach, bekomme es aber nicht auf die Reihe. Ich möchte mit Shellexecute ein externes Kommandozeilen Programm ausführen. Das Ergebnis soll in einem Memo Objekt ausgegeben werden. Als einfaches Beispiel: Filename := 'dir'; //"dir" dient hier nur als Beispielprogramm ShellExecute(handle,'open',PChar(filename), '','',SW_SHOW); Was müsste ich machen um die Ausgabe von "dir" in einem Memo Objekt darzustellen? Viele Grüße JimmyB |
AW: Shellexecute Ergebnis im Memo Objekt ausgeben
Hallo und Herzlich Willkommen :love:
Das ist wirklich viel schwieriger als es klingt. Wir müssen erst einmal klären was du genau willst. Mit "Ergebnis" meinst du wahrscheinlich nicht den "Rückgabecodes" eines Prozesses, sondern das, was das Programm in die Windows-Konsole schreibt, würde man es doppelklicken oder per Konsole aufrufen. Richtig? Wenn ja, dann ist
Delphi-Quellcode:
bereits das falsche Werkzeug für die Mission. Es ist praktisch dazu gedacht, ein "Benutzer vor dem PC doppelklickt Element XY" zu simulieren. Es bietet keine Möglichkeiten, die "Standardausgabe stdOut" des Programms (welches du starten willst) so "abzufangen", dass du es z.B. in einer Memo anzeigen könntest.
ShellExecute(..)
Die richtigen Tools hierfür wären in der Regel das etwas unhandliche ![]() Im Internet gibt es viele fertige Lösungen, wenn du z.B. "delphi capture console output" in die Suchmaschine deines Vertrauens eingibst. Wenn man den Anspruch hat das wirklich zu verstehen ist schon einiges an Arbeit nötig, vor allem wenn man sich mit Dingen wie Pipes oder stdIn/stdOut noch nicht beschäftigt hat. |
AW: Shellexecute Ergebnis im Memo Objekt ausgeben
Hallo,
lieben Dank mit den richtigen Weg zu zeigen. Du hast es richtig wiedergeben, dass ich Rückgabecodes in ein Memo Objekt ausgeben möchte. Ich mache mich auf die Suche nach Beispielen. Viele Dank JimmyB |
AW: Shellexecute Ergebnis im Memo Objekt ausgeben
Ich habe vor Äonen das hier benutzt, ob das heute noch geht weiß ich nicht (keine neue Delphi Version).
![]() |
AW: Shellexecute Ergebnis im Memo Objekt ausgeben
![]() Gruß LP |
AW: Shellexecute Ergebnis im Memo Objekt ausgeben
Hallo,
eine Suche nach ShellExecuteEx und Pipes sollten Dir helfen . |
AW: Shellexecute Ergebnis im Memo Objekt ausgeben
Hallo in die Runde,
und ganz lieben Dank für die vielen Hinweise und Tipps. Ich habe es mit mit ShellExecute und Pipes geschafft. Ein externe Programm wird gestartet und das Ergebnis in einem Memo Fenster ausgegeben. Soweit so gut. Das aktuelle Problem ist, dass solange das externe Programm läuft, die eigentlich Delphi Anwendung eingefroren ist. Es ist nicht abgestürzt, sondern lässt sich erst dann wieder nutzen, wenn das externe Programm die Arbeit beendet hat. Ich könnte mir fast vorstellen, dass diese "Einfriere" normal ist. Vielleicht auch nicht und man kann es irgendwie abstellen. Viele Grüße JimmyB |
AW: Shellexecute Ergebnis im Memo Objekt ausgeben
Zitat:
|
AW: Shellexecute Ergebnis im Memo Objekt ausgeben
Hallo,
das mit weiteren Thread schaue ich mir an. Besten Dank für den Tip! Viele Grüße JimmmyB |
AW: Shellexecute Ergebnis im Memo Objekt ausgeben
Wenn dein Delphi neu genug ist, gibt's für's Lesen von Console Ausgaben
(hab's aber ehrlicherweise selber noch nicht probiert) eine Bibliothek im GetIt package manager (Tools/GetIt). Ansonsten: - Ja, wenn es blockiert, dann sollte es in einenThread oder einen Task (-> Parallel Programming Library, seit XE7) - eine Alternative ist: dir > Dateiname.txt, das würde die Ausgabe in eine Datei umleiten, die könnte man dann auslesen. Datei Lesen wäre aber auch blockierend... Grüße TurboMagic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz