¿Puedo agrega ralgo?
Siempre que hablamos de procesos, por compatibilidad con las plataformas Win9x, nos referimos a Tool Help Functions, pero si estamos en alguna plataforma NT, podríamos utilizar las funciones definidas en la unit
PsAPI
Código Delphi
[-]
function GetProcessByFileName(AFileName: TFileName): DWORD;
var
pidProcess: array [0..1023] of DWORD;
hProcess: DWORD;
dwCount: DWORD;
hMod: HMODULE;
ModuleFileName: array[0..MAX_PATH] of Char;
i: Integer;
begin
Result := 0;
if EnumProcesses(@pidProcess, SizeOf(pidProcess), dwCount) then
for i := 0 to dwCount div SizeOf(DWORD) do
begin
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, pidProcess[i]);
if (hProcess <> 0) then
try
EnumProcessModules(hProcess, @hMod, SizeOf(hMod), dwCount);
GetModuleFilenameEx(hProcess, hMod, ModuleFileName, SizeOf(ModuleFileName));
if SameFileName(ModuleFileName, AFileName) then
begin
Result := pidProcess[i];
break;
end;
finally
CloseHandle(hProcess);
end;
end;
end;
procedure KillProcess(hProcess: DWORD);
var
hProc: DWORD;
begin
hProc := OpenProcess(PROCESS_TERMINATE, False, hProcess);
if hProc <> 0 then
try
TerminateProcess(hProc, 0);
finally
CloseHandle(hProc);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hProcess: DWORD;
begin
hProcess := GetProcessByFileName('C:\WINNT\SYSTEM32\CALC.EXE');
if hProcess <> 0 then
KillProcess(hProcess);
end;
Saludos!