
11.06.2009, 17:37
|
|
Познающий
Регистрация: 02.06.2009
Сообщений: 67
Провел на форуме: 237284
Репутация:
54
|
|
Сообщение от Maxxxtri23
Немного не то, мне нужно именно по пути, потомучто много процессов с одинаковым именем, и завершить надо не все, а именно который лежит по определенному пути
Код:
procedure TaskKill(FileName: string);
var
wh: Bool;
sp, sm, th: THandle;
pe: TProcessEntry32;
me: TModuleEntry32;
seid: Int64;
tp: TOKEN_PRIVILEGES;
rl: Cardinal;
begin
//получаем debug-привелегию
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or
TOKEN_QUERY, th);
LookupPrivilegeValue(nil, 'SeDebugPrivilege', seid);
with tp do
begin
PrivilegeCount := 1;
Privileges[0].Luid := seid;
Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
end;
AdjustTokenPrivileges(th, False, tp, SizeOf(tp), tp, rl);
//создаем снапшот
sp := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pe.dwSize := SizeOf(pe);
wh := Process32First(sp, pe);
//пробегаемся циклом по всем процессам и убиваем FileName при совпадении
while wh <> False do
begin
sm := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe.th32ProcessID);
me.dwSize := SizeOf(me);
Module32First(sm, me);
if LowerCase(me.szExePath) = LowerCase(FileName) then
TerminateProcess(OpenProcess($0001, False, pe.th32ProcessID), 0);
CloseHandle(sm);
wh := Process32Next(sp, pe);
end;
CloseHandle(sp);
tp.Privileges[0].Attributes := 0;
AdjustTokenPrivileges(th, False, tp, SizeOf(tp), tp, rl);
end;
В FileName указываем полный путь до файла.
Кстати, если кому интересно, можно получить список процессов с их полными путями:
- меняем procedure TaskKill(FileName: string); на procedure TaskList(Lines: TStrings);
- вместо if LowerCase(me.szExePath) = LowerCase(FileName) then TerminateProcess(OpenProcess($0001, False, pe.th32ProcessID), 0); пишем Lines.Add(me.szExePath);
- бросаем на форму Memo1 и вызываем TaskList(Memo1.Lines);
Последний раз редактировалось Nullsleep; 13.06.2009 в 12:10..
|
|
|