[DELPHI] процесс

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Ant1Player, 1 May 2009.

  1. Ant1Player

    Ant1Player New Member

    Joined:
    21 Nov 2008
    Messages:
    33
    Likes Received:
    1
    Reputations:
    0
    как переделать этот код
    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;  
     
    под процесс
    то есть какие команды на поиск и на убивание процесса идут?
     
  2. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    Code:
      GetWindowThreadProcessId(FindWindow(nil, 'ICQ'), pid);
      p := OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
      TerminateProcess(p, 0);
      CloseHandle(p);
    
     
  3. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Более "правильная" функция, которой можно и системный процесс убить.

    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;
    
    ///////////////////////////////////////////////////////////
     
    _________________________
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 Gar|k самое интерестное что каспер уже давно орет на попытку получения привелегий отладчика, так что могут с этим возникнуть проблемы.
    Да и привелегии отладчика тут както не нужны, потому что врядли процесс аськи будет находится в пространстве другова юзверя.