Ich habe jetzt die Funktion "entzerrt" - folgendermaen:
Delphi-Quellcode:
function KillTask(const AExeName: string): boolean;
var
p: TProcessEntry32;
h: THandle;
Process: Cardinal;
begin
Result := false;
p.dwSize := SizeOf(p);
h := CreateToolHelp32Snapshot(TH32CS_SnapProcess, 0);
try
if Process32First(h, p) then
repeat
if AnsiLowerCase(p.szExeFile) = AnsiLowerCase(AExeName) then
begin
Process := OpenProcess(Process_Terminate, false, p.th32ProcessID);
Result := TerminateProcess(Process, 0);
end;
until (not Process32Next(h, p)) or Result;
finally
CloseHandle(h);
end;
end;
Ich habe p dann mal berwacht, als AExeName 'WoW.exe' war...
Dabei ist das Programm garnicht bis zu OpenProcess gekommen, da in diese If-Anweisung garnicht gesprungen wurde:
Delphi-Quellcode:
if AnsiLowerCase(p.szExeFile) = AnsiLowerCase(AExeName) then
begin
Process := OpenProcess(Process_Terminate, false, p.th32ProcessID);
Result := TerminateProcess(Process, 0);
end;
Dann hab ich mir mal p angeschaut... p wurde mit
(296, 0, 0, 0, 0, 1, 0, 0, 0, ('[', 'S', 'y', 's', 't', 'e', 'm', ' ', 'P', 'r', 'o', 'c', 'e', 's', 's', ']', #0, '', '', '', #24, #0, #0, #0, '', #7, #0, #0, 'X', '', #18, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, '<', #0, '>', #0, #0, '', '', '', 't', #7, #0, #0, '', '', #18, #0, '', '/', '', '|', #3, #0, #31, #0, #0, #0, #0, #0, #0, '', '', '', '', '', #18, #0, #30, #0, #31, #0, '', '', #18, #0, '', '', #18, #0, '', '', '', '|', '', '', '', '|', 't', #7, #0, #0, #12, '', #18, #0, '', #21, 'j', 't', 't', #7, #0, #0, ' ', '.', #21, #0, '', '', 'k', 't', '|', #6, #16, #0, #2, #0, #0, #0, '', '', #0, #0, 'x', '', #20, #0, 'x', '', #20, #0, #2, #0, #0, #0, '(', #0, '', #0, #0, #0, #0, #0, 'x', '', #20, #0, '', 'q', #20, #0, '(', '', #20, #0, '', #13, #21, #0, #0, #0, #0, #0, '', '', #18, #0, 'M', 'S', 'C', 'T', 'F', '.', 'S', 'e', 'n', 'd', 'R', 'e', 'c', 'e', 'i', 'v', 'e', '.', 'E', 'v', 'e', 'n', 't', '.', 'I', 'A', 'O', '.', 'I', 'C', #0, #0, #1, #0, #0, #0, '', '', #18, #0, 'p', '', #18, #0, 'p', '', #18, #0, '', #4, '', 'w', #8, '', '', 'w', '', '', '', '', #16, #0, #0, #0, '', '3', '', '|', 'l', '', #18, #0, #0, #0, #0, #0, '', 'Z', 'A', #0))
angezeigt...
Dabei ist p.szExeFile dann gleich
('[', 'S', 'y', 's', 't', 'e', 'm', ' ', 'P', 'r', 'o', 'c', 'e', 's', 's', ']', #0, '', '', '', #24, #0, #0, #0, '', #7, #0, #0, 'X', '', #18, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, '<', #0, '>', #0, #0, '', '', '', 't', #7, #0, #0, '', '', #18, #0, '', '/', '', '|', #3, #0, #31, #0, #0, #0, #0, #0, #0, '', '', '', '', '', #18, #0, #30, #0, #31, #0, '', '', #18, #0, '', '', #18, #0, '', '', '', '|', '', '', '', '|', 't', #7, #0, #0, #12, '', #18, #0, '', #21, 'j', 't', 't', #7, #0, #0, ' ', '.', #21, #0, '', '', 'k', 't', '|', #6, #16, #0, #2, #0, #0, #0, '', '', #0, #0, 'x', '', #20, #0, 'x', '', #20, #0, #2, #0, #0, #0, '(', #0, '', #0, #0, #0, #0, #0, 'x', '', #20, #0, '', 'q', #20, #0, '(', '', #20, #0, '', #13, #21, #0, #0, #0, #0, #0, '', '', #18, #0, 'M', 'S', 'C', 'T', 'F', '.', 'S', 'e', 'n', 'd', 'R', 'e', 'c', 'e', 'i', 'v', 'e', '.', 'E', 'v', 'e', 'n', 't', '.', 'I', 'A', 'O', '.', 'I', 'C', #0, #0, #1, #0, #0, #0, '', '', #18, #0, 'p', '', #18, #0, 'p', '', #18, #0, '', #4, '', 'w', #8, '', '', 'w', '', '', '', '', #16, #0, #0, #0, '', '3', '', '|', 'l', '', #18, #0, #0, #0, #0, #0, '', 'Z', 'A', #0)
und natrlich wird in die Anweisungen nicht gesprungen... Frage ist nun natrlich, warum es beim Firefox zB funktioniert, aber bei WoW.exe nicht? p.szExeFile war beim firefox ja auch gleich dem exe-Namen...
Ich bin sehr angewiesen auf eine Lsung; es wre nett wenn jemand eine findet, ich bin am Ende mit meinem Latein...