Есть команда: FindWindow(nil, 'Диспетчер задач') Она ищет запущенные приложения по названию окна,а можно сделать,что бы искала по названию процесса?Т.е не 'Диспетчер задач' ,а 'taskmgr.exe'?
Название темы не отображает суть вопроса. Код: var HandleWindow: THandle; ProcessID: DWord; ... HandleWindow :=FindWindow(nil,'Диспетчер задач'); GetWindowThreadProcessId(HandleWindow,@ProcessID); Так можно получить ID процесса по заголовку.
Код: 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');