# Programme beenden



## Grimreaper (24. Juli 2003)

Hallo!

Ich möchte ein Programm aus meinem heraus beenden. Soweit kein Problem und auch im Forum zu finden. Ich habe mit der "CreateToolhelpSnapshot"-API die Process-ID des Programms gefunden und übergebe sie an die Beenden-Prozedur die so aussieht:

```
Private Sub KillProc(ByVal ProcID As Long)
    Dim Result&, Task&
    
        Result = ProcID
     
      Task = OpenProcess(PROCESS_TERMINATE, 0&, Result)
      Result = TerminateProcess(Task, 1&)
      If Result = 0 Then MsgBox ("Termination failed")
      Result = CloseHandle(Task)
      lblProcess.Caption = "Process ID " & ProcID & " / Task " & Task & " terminated!"
End Sub
```
So weit so gut. Das Problem ist nur, dass das Programm tortzdem weiter läuft. Die ProcessID wird aber richtig gefunden, das habe ich aus dem Taskmanager entnommen. Nur beim Aufruf von TerminateProcess wird immer die 0 übergeben, Beenden nicht erfolgreich. Bei dem Programm welches ich beenden will handelt es sich um die IMAPI.EXE... Hat jemand ne Ahnung was das Problem ist? Der Taskmanager beendet das Programm jedenfalls ohne Beanstandungen.

mfg Grimreaper


----------



## Dario Linsky (25. Juli 2003)

Du brauchst AFAIK nicht die Prozess-ID, sondern das Handle der anderen Anwendung. Und an dieses Handle schickst Du dann ganz einfach mit SendMessage die Nachricht WM_QUIT.


----------



## Grimreaper (25. Juli 2003)

Hm, mit der ProzessID hats bei anderen Anwendungen geklappt und ich hab gehört, dass sich Programme eher mit TerminateProcess als mit SendMessage beenden lassen (Sendmessage könnte noch abgefangen werden). Wie dem auch sei, wie bekomme ich denn die Hwnd eines Programms, das keinen titel hat und von der ich nur den Dateinamen kenne?

mfg Grimreaper


----------



## DrSoong (25. Juli 2003)

Also, zum Thema *Task eliminieren* gibts das hier:
http://www.activevb.de/tipps/vb6tipps/tipp0124.html

Zum Thema *EXE-Namen* gibts das hier:
http://www.activevb.de/tipps/vb6tipps/tipp0273.html


Der Doc!


----------



## Grimreaper (25. Juli 2003)

@DrSoong
Danke für die Links, aber die sind mir beide schon bekannt und bringen mich nicht weiter, da
1) entspricht meinem Ansatz und löst nicht das Problem, das sich das Programm nicht beenden lässt.

2) Kann mir zu den .exe-Namen die ProcessID liefern, aber nicht die hWnd eines Fensters. Ich brauch für Sendmessage aber die hWnd des Programms.

mfg Grimreaper


----------



## foxxx (26. Juli 2003)

Wenn du den Text der Titelleiste kennst, ist das nicht schwer...

... du ermittelst einfach den kompletten Fensterhandle. Dann suchst du dir das mit dem entsprechenden Text raus. (Sobald es ein zweites mit dem gleichen Namen gibt, gibts Probleme). Zu diesem Fenster findest du dann auch die hWnd.


----------



## Grimreaper (27. Juli 2003)

@foxxx

so mach ich das ja. Das Problem ist das die imapi.exe ne unsichtbare Anwendung ohne Fenster ist, die hat keinen Titel!

mfg Grimreaper


----------



## foxxx (27. Juli 2003)

Hi,
ich kann das grad nicht nachprüfen, aber...

... ohne Fenster heisst noch nicht automatisch ohne Titel. Ersteres umgehst du einfach, dass du dir auch die nicht sichtbaren auflisten lässt. Wenn sie dann einen Titel hat hast du auch die hWnd. Du kannst die sogar auch die ohne Titel anzeigen lassen. Allerdings ist es dann etwas schwieriger die richtige zu finden..


----------

