как переделать этот код PHP: procedure TForm1.Timer1Timer(Sender: TObject); begin if FindWindow(nil, 'ICQ') <> 0 then begin ShowMessage('Окно найдено'); PostMessage(FindWindow(Nil, 'ICQ'), WM_QUIT, 0, 0); end else begin ShowMessage('Окно Ненайдено'); Form1.Close; end; end; под процесс то есть какие команды на поиск и на убивание процесса идут?
Code: GetWindowThreadProcessId(FindWindow(nil, 'ICQ'), pid); p := OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); TerminateProcess(p, 0); CloseHandle(p);
Более "правильная" функция, которой можно и системный процесс убить. Code: /////////////////////////////////////////////////////////// function ProcessTerminate(dwPID:Cardinal):Boolean; var hToken:THandle; SeDebugNameValue:Int64; tkp:TOKEN_PRIVILEGES; ReturnLength:Cardinal; hProcess:THandle; begin Result:=false; // Добавляем привилегию SeDebugPrivilege // Для начала получаем токен нашего процесса if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken ) then exit; // Получаем LUID привилегии if not LookupPrivilegeValue( nil, 'SeDebugPrivilege', SeDebugNameValue ) then begin CloseHandle(hToken); exit; end; tkp.PrivilegeCount:= 1; tkp.Privileges[0].Luid := SeDebugNameValue; tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; // Добавляем привилегию к нашему процессу AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp),tkp,ReturnLength); if GetLastError()<> ERROR_SUCCESS then exit; // Завершаем процесс. Если у нас есть SeDebugPrivilege, то мы можем // завершить и системный процесс // Получаем дескриптор процесса для его завершения hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, dwPID); if hProcess =0 then exit; // Завершаем процесс if not TerminateProcess(hProcess, DWORD(-1)) then exit; CloseHandle( hProcess ); // Удаляем привилегию tkp.Privileges[0].Attributes := 0; AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength); if GetLastError() <> ERROR_SUCCESS then exit; Result:=true; end; ///////////////////////////////////////////////////////////
2 Gar|k самое интерестное что каспер уже давно орет на попытку получения привелегий отладчика, так что могут с этим возникнуть проблемы. Да и привелегии отладчика тут както не нужны, потому что врядли процесс аськи будет находится в пространстве другова юзверя.