Unutar windowsa imas jednu "tabelu" gde se cuvaju informacije o svim procesima koji su trenutno aktivni. Prilikom startovanja nekog procesa, windows mu dodeli neki jedinstveni broj, koji se zove Process ID ili krace PID. Taj broj oznacava taj proces, i nijedan drugi proces ne moze imati isti broj. Kad pokrenes task manager, vidis pored imena procesa neke brojeve u opsegu 0-2000, to su u stvari Process ID brojevi.
E sad, ako zelis da ubijes recimo
explorer.exe, moras prvo da nadjes njegov PID, i da ga ubijes preko TerminateProcess() fje. PID nalazis preko ove fje:
Code:
uses
Windows, TlHelp32, SysUtils;
function GetProcessID(const procName : String) : DWORD;
var
data : TProcessEntry32;
handler : THandle;
begin
result := 0;
handler := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
data.dwSize := SizeOf(data);
If Process32First(handler, data) Then
Begin
If LowerCase(data.szExeFile) = LowerCase(procName) Then
result := data.th32ProcessID;
While Process32Next(handler, data) Do
If LowerCase(data.szExeFile) = LowerCase(procName) Then
result := data.th32ProcessID;
End;
CloseHandle(handler);
end;
Kad nadjes PID procesa, prosledi ga ovoj f-ji :
Code:
function KillProcess(const APID : DWORD) : Boolean;
var
procHandle : THandle;
begin
procHandle := OpenProcess(PROCESS_TERMINATE, FALSE, APID);
If procHandle <> 0 Then
Begin
result := TerminateProcess(procHandle, 0);
CloseHandle(procHandle);
End
else
result := FALSE;
end;
Ne zaboravi da u uses listu dodas TlHelp32 unit.
[Ovu poruku je menjao reiser dana 20.04.2006. u 21:15 GMT+1]