1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

[Вопрос]Delphi

Тема в разделе 'Delphi', создана пользователем alekill, 18 фев 2011.

  1. TopicStarter Overlay

    alekill Пользователи

    Сообщения:
    166
    Лайки:
    27
    Репутация:
    0
    Команда:
    GreenCat
    Есть команда:
    FindWindow(nil, 'Диспетчер задач')
    Она ищет запущенные приложения по названию окна,а можно сделать,что бы искала по названию процесса?Т.е не 'Диспетчер задач' ,а 'taskmgr.exe'?
  2. JoLan Команда форума Администратор AngeliCore Программист

    Сообщения:
    1.061
    Лайки:
    948
    Пол:
    Мужской
    Репутация:
    6
    Команда:
    AngeliCore
    Страна:
    Russian Federation Russian Federation
    Название темы не отображает суть вопроса.

    Код:
    var HandleWindow: THandle;
    ProcessID: DWord;
    ...
    HandleWindow :=FindWindow(nil,'Диспетчер задач');
    GetWindowThreadProcessId(HandleWindow,@ProcessID);
    Так можно получить ID процесса по заголовку.
  3. thehavoc Пользователи

    Сообщения:
    4
    Лайки:
    1
    Репутация:
    0
    Код:
    var
    hSnap:THandle;
    pe:TProcessEntry32;
    pid: DWORD;
    begin
    pe.dwSize:=SizeOf(pe);
    hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    If Process32First(hSnap,pe) then
    While Process32Next(hSnap,pe) do
    begin
    if ExtractFileName(pe.szExeFile)='taskmgr.exe' then
    begin
    //Ваши действия
    end;
    
    
    Если вам нужно убить процесс, то есть удобная и безотказная функция.
    Код:
    function KillProcess(PID: Integer): Integer;
    var
    PH, EC: Cardinal;
    begin
    Result:= 0;
    PH:= OpenProcess(PROCESS_ALL_ACCESS, True, PID);
    GetExitCodeProcess(PH, EC);
    if (PH = 0) then
    Result:= GetLastError
    else begin
    if not TerminateProcess(PH, EC) then
    Result:= GetLastError;
    CloseHandle(PH);
    end;
    
    Некоторые процессы возможно завершить только с особыми правами.
    На этот случай есть функция
    Код:
    function AdjustProcessPrivilege(PrivilegeName: WideString): Boolean;
    var
    TokenHandle: Cardinal;
    TokenPrivileges: TTokenPrivileges;
    ReturnLength: Cardinal;
    begin
    Result := False;
    try
    if Windows.OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TokenHandle) then
    begin
    try
    LookupPrivilegeValueW(nil, PWideChar(PrivilegeName), TokenPrivileges.Privileges[0].Luid);
    TokenPrivileges.PrivilegeCount := 1;
    TokenPrivileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    if AdjustTokenPrivileges(TokenHandle, False, TokenPrivileges, 0, nil, ReturnLength) then
    Result := True;
    finally
    CloseHandle(TokenHandle);
    end;
    end;
    except
    Exit;
    end;
    end;
    
    А в Создание формы прописать:
    Код:
    AdjustProcessPrivilege('SeDebugPrivilege');
Черновик сохранён Черновик удалён

Поделиться этой страницей