![]() |
|
|
#1
|
|||
|
|||
|
Просмотр запущенных процессов, и завершение по /PID. Аналог виндовозовских tasklist taskill. Что подскажете?
|
|
#2
|
||||
|
||||
|
STFW:
Win9x - "tool help functions" WinNT - NtQuerySystemInformation |
|
#3
|
|||
|
|||
|
Пример ниже убивает процесс по заданому имени
Код:
procedure ProcessTerminate(sName: string);
var
han : THandle;
ProcStruct : PROCESSENTRY32;
sID : string;
begin
han := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
if han = 0 then exit;
ProcStruct.dwSize := sizeof(PROCESSENTRY32);
if Process32First(han, ProcStruct) then begin
repeat
sID := ExtractFileName(ProcStruct.szExeFile);
if UpperCase(copy(sId, 1, length(sName))) = uppercase(sName) then begin
ProcessTerminate(ProcStruct.th32ProcessID);
Break;
end;
until not Process32Next(han, ProcStruct);
end;
CloseHandle( han );
end;Последний раз редактировалось Admin, 24.09.2008 в 10:29. |
|
#4
|
|||
|
|||
|
Цитата:
|
|
#5
|
|||
|
|||
|
Цитата:
Вообще здесь в параметре процедуры, но этот пример не убьет процесс. Вот код, который найдет PID по имени. А дальше можно и "убить" процесс. Код:
function GetProcessPidByName(fName: String): THandle;
var
hSnapshot: THandle;
function ProcessPidByName(hProcess: DWord; fName: String): THandle;
var
ProcEntry: TProcessEntry32;
ProcessPid: THandle;
begin
ProcEntry.dwSize:= SizeOf(ProcEntry);
ProcessPid:= 0;
if Process32First(hProcess, ProcEntry) then
begin
repeat if ProcEntry.szExeFile = fName then
begin
ProcessPid:= ProcEntry.th32ProcessID;
Result:= ProcessPid;
Exit;
end;
until not Process32Next(hProcess, ProcEntry)
end;
Result:= ProcessPid;
end;
begin
hSnapshot:= CreateToolhelp32Snapshot($2, 0);
if hSnapshot <> INVALID_HANDLE_VALUE then
Result:= ProcessPidByName(hSnapshot, fName);
CloseHandle (hSnapShot);
end; |