Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Процесс не убивается...


Автор: Илья 15.4.2005, 11:52
FindWindow(nil, 'Безымянный - Блокнот');
TerminateProcess(GetWindowThreadProcessId(h),0)

В первой строке есть хендл (проверял) и ID процесса вроде находит (проверял) вот тока процесс не убивается... вторая строка кода возвращает False... Подскажите что делаю неправильно... (блокнот продолжает висеть в процессах)... Вообще это я так для примера Блокнот убиваю, убить из процессов надо другую прогу WM_Close и WM_Destroy не катит...
Кто знает мож поможите... очень надо... smile

Автор: <Spawn> 15.4.2005, 12:30
Например, так:

Код
procedure TForm1.Button1Click(Sender: TObject);
var
  wnd, hProcess: THandle;
  PID: DWORD;
begin
  wnd := FindWindow('Notepad', nil);
  if wnd <> 0 then
  begin
    GetWindowThreadProcessID(wnd, @PID);
    hProcess := OpenProcess(PROCESS_TERMINATE, False, PID);
    if hProcess = 0 then
    begin
      ShowMessage(SysErrorMessage(GetLastError));
      Exit;
    end;
    TerminateProcess(hProcess, 0);
  end;
end;

Автор: Guest 15.4.2005, 12:54
Я так и думал, что все дело в определенном доступе до процесса.... Тока не мог его правильно организовать!!!! ТЫ ПРОСТО ГЕНИЙ СПАСИБО!!!!! smile smile smile

Автор: Pathfider 19.4.2005, 19:52
К слову: иногда нужны привелегии SE_DEBUG_PRIVILEGE иначе например системный процесс в NT не убьешь.

Автор: Girder 19.4.2005, 23:33
Цитата(Pathfider @ 19.4.2005, 20:52)
К слову:
К слову... можно и без всяких привелегий... завалить... например: ACL ему подправить

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)