Announcement

Collapse
No announcement yet.

Wie kann man ein Programm schliessen, das man zuvor mit Createprocess gestartet hat?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie kann man ein Programm schliessen, das man zuvor mit Createprocess gestartet hat?

    Hi,
    ich starte ein Programm mit CreateProcess. Wie kann ich es später zivilisiert wieder schliessen? Kann mir jemand Beispiel Code zeigen? Ich habe sowas noch nie gemacht und die hiesige Kollegen auch nicht.
    Besten Dank

  • #2
    Wenn du den Namen des Fensters weisst, kannst du ein WM_CLOSE senden

    oder
    Der Übergabeparameter ist der Name des Programmes bsp. outlook.exe


    bool Command_KillPrg(String value)
    {
    PROCESSENTRY32 pe;
    DWORD Pid=-1;
    String procname;
    value=value.LowerCase();
    HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROC ESS,0);
    if ((int)hSnapshot==-1)
    return false;
    pe.dwSize=sizeof(PROCESSENTRY32);
    bool retval=Process32First(hSnapshot,&pe);
    while(retval)
    {
    procname=pe.szExeFile;
    procname=procname.LowerCase();
    if(procname==value||procname.Pos(value)>0)
    {
    Pid=pe.th32ProcessID;
    break;
    }
    pe.dwSize=sizeof(PROCESSENTRY32);
    retval=Process32Next(hSnapshot,&pe);
    }
    CloseHandle(hSnapshot);
    if(Pid==-1)
    return false;
    HANDLE hProc=OpenProcess(PROCESS_TERMINATE|SYNCHRONIZE,fa lse,Pid);
    if(hProc==NULL)
    return false;
    TerminateProcess(hProc,0);
    DWORD ws=WaitForSingleObject(hProc,5000);
    if(ws==WAIT_TIMEOUT)
    return false;
    return true;
    }
    Christian

    Comment


    • #3
      Hallo Christian,
      danke für den Code-Beispiel, aber ich lese überall dass man TerminateProcess möglichst nicht verwenden soll...
      Gibt es eine Möglichkeit vom Prozess auf das Fenster zu kommen, um dann das WM_Close zu senden? Wenn ja, wie geht es?
      Besten Dank
      Seretta

      Comment


      • #4
        In dem du mit EnumWindows

        Beispiel hier http://www.marquardtnet.info/cecke/q...quicky_34.html

        alle Fenster nach deiner ProcessID durchsuchst. Im obigen Beispiel wird der Fenstertitel durchsucht. Das ist hier nun nicht interessant. Du nimmst stattdessen

        GetWindowThreadProcessId

        zu dem Handle und vergleichst diese mit deiner ProcessID. Sind sie gleich, so hast du das Handel gefunden und kannst mit SendMessage ein Quit senden
        Christian

        Comment


        • #5
          Hallo Christian,
          das scheint exakt das zu sein was ich suche. Besten Dank!

          Seretta

          Comment

          Working...
          X