@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. В случае если у вас возникают проблемы с выполнением проверки процесса, убедитесь что ваша программа запущена с правами администратора, так как некоторые функции требуют повышенных прав доступа.