externe Anwendung schließen



  • Hi,
    ich möchte ein Programm schreiben welches ein anderes Programm schließt!
    Brauche Hilfe 😉

    MfG FB





  • Hallo

    ist eine Sache der WinAPI. Such mal nach EnumWindows bzw. FindWindow und TerminateProcess.

    bis bald
    akari



  • @tuxman:

    /-------------------------------------------------------------
    // Starten und Beenden von Anwendungen mit CreateProcess
    //-------------------------------------------------------------
    
    // Windows-Strukturen für Process-Informationen:
    TStartupInfo stgStartupInfo;
    TProcessInformation stgProcessInfo;
    
    void StartApp(AnsiString); // Startet Programm
    void CloseApp(void);       // Beendet Programm
    
    //---------------------------------------------------------------
    //  Startet das Programm slProgr
    //---------------------------------------------------------------
    void StartApp(AnsiString slProgr)
    {
      setmem(&stgStartupInfo,sizeof(TStartupInfo),0);
      stgStartupInfo.cb = sizeof(TStartupInfo);
      CreateProcess(NULL,slProgr.c_str(),NULL,NULL,
                    false,NORMAL_PRIORITY_CLASS,
                    NULL,ExtractFilePath(slProgr).c_str(),
                    &stgStartupInfo,&stgProcessInfo);
    }
    
    //---------------------------------------------------------------
    //  Beendet das Programm, sofern gestartet
    //---------------------------------------------------------------
    void CloseApp(void)
    {
      TerminateProcess(stgProcessInfo.hProcess,0);
    }
    

    Wo gebe ich den Programmnamen bzw das Handle, welches ich mit FindWindow ermittelt habe, an?

    @akari:
    Hab nichts passendes gefunden!

    gruß FB 😉



  • Hallo

    du mußt erst mal sagen, ob du das zu schließende Programm selber in deinem eigenem Programm startest oder bereits extern gestartet wurde.
    In ersten Fall brauchst du die Variante mit CreateProcess (nebenbei : das Beispiel geht davon aus, das du die Structs und die Funktionen als Member eines Forms definierst). Dann rufst du

    StartApp("c:\\temp\\prog.exe");
    

    auf, um besagtes Programm zu starten, und irgendwann eben CloseApp, um es wieder zu schließen.

    Im zweiten Fall statt dem Create eben

    AnsiString titel = "Prog"; // Fenster- bzw. Prozeßtitel des Programms
    HWND hWnd = FindWindow(titel.c_str(), NULL);
    ...
    TerminateProcess(hWnd,0);
    

    bis bald
    akari



  • Hallo,

    Warum so kompliziert ? So geht's doch auch :

    HWND Handle_des_Fensters = FindWindow(0,"Caption des Fensters");
    if (PostMessage(Handle_des_Fensters, WM_CLOSE, 0, 0))
      Beep(4000, 50);
    

    Wobei "Caption des Fensters" der Titel des zu schließenden Fensters ist.
    Falls es klappt, dann piepts... 🙂

    Bis dann denn,
    🙂
    Nash



  • Thx @ all
    @Nash: hab deine Lösung genommen
    hat geklappt! 👍

    MfG FB


Log in to reply