Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [DELPHI] процесс (https://forum.antichat.xyz/showthread.php?t=118672)

Ant1Player 01.05.2009 21:06

[DELPHI] процесс
 
как переделать этот код
PHP код:

  procedure TForm1.Timer1Timer(SenderTObject); 
begin 
if FindWindow(nil'ICQ') <> 0 then  
  begin 
  ShowMessage
('Окно найдено'); 
  
PostMessage(FindWindow(Nil'ICQ'), WM_QUIT00); end 
else 
  
begin 
  ShowMessage
('Окно Ненайдено'); 
  
Form1.Close;  end
end

под процесс
то есть какие команды на поиск и на убивание процесса идут?

desTiny 01.05.2009 23:10

Код:

  GetWindowThreadProcessId(FindWindow(nil, 'ICQ'), pid);
  p := OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
  TerminateProcess(p, 0);
  CloseHandle(p);


Gar|k 02.05.2009 00:58

Более "правильная" функция, которой можно и системный процесс убить.

Код:

///////////////////////////////////////////////////////////
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;

///////////////////////////////////////////////////////////


slesh 02.05.2009 14:39

2 Gar|k самое интерестное что каспер уже давно орет на попытку получения привелегий отладчика, так что могут с этим возникнуть проблемы.
Да и привелегии отладчика тут както не нужны, потому что врядли процесс аськи будет находится в пространстве другова юзверя.


Время: 13:27