Проверка запущенности процесса по дескриптору в Windows
При работе с процессами в операционных системах семейства Windows часто возникает необходимость проверки, запущен ли процесс, на который имеется дескриптор. Это может быть особенно важно при запуске приложений из внешних источников, например, через функцию ShellExecuteEx. В данной статье мы рассмотрим, как можно проверить, запущен ли процесс, используя его дескриптор, начиная с Windows 2000 и выше.
Проблема проверки процесса
Когда вы запускаете приложение с помощью ShellExecuteEx, вы получаете дескриптор процесса через указатель TShellExecuteInfo.hProcess. Однако, если процессов с одинаковым именем запущено несколько, важно убедиться, что проверка запущенности проводится именно для того процесса, который был запущен вашей программой.
Решение с использованием WinAPI
Для проверки запущенности процесса можно использовать функцию WaitForSingleObject, которая принимает дескриптор процесса в качестве аргумента. Если процесс все еще работает, функция вернет значение WaitTimeout. Если процесс завершил свою работу, функция вернет Wait_Object_0, так как завершение процесса делает его дескрипторы сигнализированными.
uses
Windows;
function IsProcessRunning(hProcess: THandle): Boolean;
var
Result: DWORD;
begin
Result := WaitForSingleObject(hProcess, 0);
IsProcessRunning := (Result = WAIT_TIMEOUT);
end;
Обратите внимание, что если вам также необходимо узнать код завершения процесса, вы можете использовать функцию GetExitCodeProcess.
Альтернативные способы проверки
Если вам известен идентификатор процесса, вы можете использовать функцию OpenProcess с правами PROCESS_QUERY_INFORMATION для получения информации о процессе, включая его состояние. Однако, в вашем случае, поскольку у вас уже есть дескриптор процесса, этот метод не нужен.
Подтверждение и комментарии
Использование WaitForSingleObject с дескриптором процесса и таймаутом в нуле является надежным способом проверки запущенности процесса. Это решение поддерживается начиная с Windows 2000, что соответствует вашим требованиям.
Заключение
Проверка запущенности процесса по дескриптору в Windows — это задача, которую можно решить с помощью стандартных функций WinAPI. WaitForSingleObject и GetExitCodeProcess являются основными инструментами для этого, и они доступны начиная с Windows 2000, что делает их подходящим решением для широкого спектра систем Windows.
Проверка запущенности процесса в Windows с использованием его дескриптора.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS