Einzelnen Beitrag anzeigen

Sereby

Registriert seit: 31. Mär 2008
91 Beiträge
 
#1

Check ob ein Programm nicht mehr reagiert

  Alt 27. Jan 2009, 12:06
Hiho,

ich würde gerne überprüfen ob ein externes Programm noch reagiert oder nicht.
Nur weiss ich leider nicht so richtig wie ich da rangehen soll.

Das Handle hole ich mir zur zeit folgendermaßen:
Delphi-Quellcode:
function FindTask(ExeFileName: String): Integer;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  ExeFileName := UpperCase(ExeFileName);
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

  while Integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = ExeFileName) or
        (UpperCase(FProcessEntry32.szExeFile) = ExeFileName)) then
      Result := OpenProcess(PROCESS_TERMINATE,BOOL(0), FProcessEntry32.th32ProcessID);

     ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;
Die funktion sollte eigentlich einen Task Killen aber die hab ich nur so kurz modifiziert dass ich das Handle erhalte, weil es mit findwindow irgendwie nicht ging :-/

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  hWindowHandle: HWND;
  Res,Err: Cardinal;
begin
  hWindowHandle := FindTask('Freezer.exe');
  if (hWindowHandle = 0) or (hWindowHandle = INVALID_HANDLE_VALUE) then Exit;

  Res := WaitForSingleObject(hWindowHandle,200);
  Err := GetLastError;

  ShowMessage(IntToStr(Res) + ': ' + SysErrorMessage(Res) + #13#10 + IntToStr(Err) + ': ' + SysErrorMessage(Err));
end;
GetLastError sagt nur Zugriff verweigert
Ich hoffe ihr könnt mich aufn richtigen weg schubsen!

MfG Sereby
  Mit Zitat antworten Zitat