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 Verzeichnis

    Und 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?


Anmelden zum Antworten