Показать сообщение отдельно

  #8  
Старый 11.06.2009, 17:37
Nullsleep
Познающий
Регистрация: 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..
 
Ответить с цитированием