externes Prog über Button starten & schließen
-
Hallo,
so wie der Titel schon sagt, möchte ich über einen Button in einer Form ein externes Programm starten und mit dem gleichen Button schließen.
Wie ich das Programm aufrufe weiss ich:
ShellExecute(0, "open", "Test.exe", 0, 0, SW_SHOWNORMAL); //FileParam egal, da Test.exe im gleichen VerzeichnisUnd wahrscheinlich brauch ich auch eine "if"-Anweisung, gell?
Für jede Hilfe bin ich dankbar.
-
Hallo
da wuerde ich doch mal in die
FAQ
schauen
Solch eine Frage war doch schon oft da.
MfG
Klaus
-
Die habe ich durchgelesen, da steht etwas vom öffnen,aber nix von öffnen UND schließen.
-
Hallo
schau nochmal in der FAQ nach
(Tip - externes Programm starten / CreateProcess)MfG
Klaus[ Dieser Beitrag wurde am 13.03.2003 um 15:49 Uhr von KlausB editiert. ]
-
Hallo.
Das habe ich gelesen. Gibt es keine einfachere Lösung?
Oder rollen wirs mal von der anderen Seite auf:
Es würde reichen, wenn das aufgerufene Programm, nicht nochmal durch Drücken des Buttons aufpopt.Aber dazu muss ich auch den Prozess erkennen, der gerade läuft, gell?
-
Hallo
"einfachere Loesung"
- externes Programm ueber CreateProcess starten
- Schleife - Abfrage "laeuft Programm noch"oder ?
Was willst du denn eigentlich genau machen
MfG
Klaus
-
Hallo.
Also das Projekt soll aus einem Hauptprogramm bestehen über das ca. 5 Unterprogramme aufgerufen werden können. (da nicht immer alle Programme benötigt werden; einfachere Möglichkeit des Updates usw.)
Und es soll jedes Programm nur einmal aufgerufen werden können.
Also bestehen zwei Möglichkeiten: 1. Öffnen und Schließen über einen Button im Hauptprogramm oder 2. Schließen über Unterprogramm und Verhindern eines nochmaligen Öffnens.
-
Ich weiß zwar nicht, wozu sowas nützen soll - aber egal. Zu 1. findest du einen brandneuen FAQ-Beitrag "ShellExecute - Fenster wieder schließen". Zu 2. Merke dir die ProcessIds der aufgerufenen Prozesse in einem DWORD-Array. Mache dir 5 Timer, in denen du in bestimmten Abständen abfragst, ob das Programm noch läuft. Dafür gibt es sicherlich mehrere Möglichkeiten. Eine wäre, WaiForSingleObject() zu benutzen mit einer verhältnismäßig kurzen TimeOut-Zeit (10ms oder so). Wenn der Rückgabewert nicht WAIT_OBJECT_0 ist, dann existiert der Prozess noch. Eine andere Möglichkeit fällt mir im Moment nicht ein.
@all: Gibt es eine sichere Möglichkeit über die Process-Id festzustellen, ob ein Prozess (noch) existiert?