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