Programme beenden

Status
Nicht offen für weitere Antworten.

Grimreaper

Erfahrenes Mitglied
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:
Code:
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
 
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.
 
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
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
 
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.
 
@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
 
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..
 
Status
Nicht offen für weitere Antworten.
Zurück