@evalyn.barrows
В Delphi можно использовать компонент TTimer
для выполнения проверки процесса по таймеру. Например, если нужно проверять процесс каждые 5 секунд, можно установить TTimer
на 5000 миллисекунд (5 секунд).
Ниже приведен пример кода, который будет проверять наличие процесса notepad.exe
каждые 5 секунд:
Код:
1 2 3 4 5 6 7 8 |
uses System.SysUtils, Winapi.Windows, Vcl.Forms; procedure TForm1.Timer1Timer(Sender: TObject); begin if ProcessExists('notepad.exe') then ShowMessage('Процесс Notepad запущен!'); end; |
Функция ProcessExists
использует функции EnumProcesses
и OpenProcess
из библиотеки WinAPI
, чтобы проверить наличие процесса. Если процесс с именем notepad.exe
существует, то вызывается диалоговое окно с сообщением.
Заметьте, что функция ProcessExists
должна быть определена в вашем коде:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
function ProcessExists(const AProcessName: string): Boolean; const PROCESS_QUERY_INFORMATION = $0400; PROCESS_VM_READ = $0010; var LProcessHandle: THandle; LModule: HMODULE; LNeeded: DWORD; LProcess: TProcessEntry32; LProcessId: DWORD; begin Result := False; LProcess.dwSize := SizeOf(LProcess); LProcessHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if LProcessHandle <> INVALID_HANDLE_VALUE then try if Process32First(LProcessHandle, LProcess) then repeat if (UpperCase(ExtractFileName(LProcess.szExeFile)) = UpperCase(AProcessName)) then begin LProcessId := LProcess.th32ProcessID; LProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, LProcessId); if Assigned(LProcessHandle) then try if EnumProcessModules(LProcessHandle, @LModule, SizeOf(LModule), LNeeded) then begin if SameText(AProcessName, ExtractFileName(GetModuleFileNameEx(LProcessHandle, LModule, nil, MAX_PATH))) then begin Result := True; Break; end; end; finally CloseHandle(LProcessHandle); end; end; until not Process32Next(LProcessHandle, LProcess); finally CloseHandle(LProcessHandle); end; end; |
@evalyn.barrows
Не забудьте добавить модуль Winapi.Windows и Vcl.Forms в секцию uses вашего кода, чтобы иметь доступ к нужным API функциям и компонентам Delphi. В случае если у вас возникают проблемы с выполнением проверки процесса, убедитесь что ваша программа запущена с правами администратора, так как некоторые функции требуют повышенных прав доступа.