Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как узнать, запущен ли процесс в Win9x

Delphi , Программа и Интерфейс , Процессы и Сервисы

Как узнать, запущен ли процесс в Win9x


function IsRunning(sName: string): boolean;
var
  han: THandle;
  ProcStruct: PROCESSENTRY32; // from "tlhelp32" in uses clause
  sID: string;
begin
  Result := false;
  // Get a snapshot of the system
  han := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
  if han = 0 then
    exit;
  // Loop thru the processes until we find it or hit the end
  ProcStruct.dwSize := sizeof(PROCESSENTRY32);
  if Process32First(han, ProcStruct) then
  begin
    repeat
      sID := ExtractFileName(ProcStruct.szExeFile);
      // Check only against the portion of the name supplied, ignoring case
      if uppercase(copy(sId, 1, length(sName))) = uppercase(sName) then
      begin
        // Report we found it
        Result := true;
        Break;
      end;
    until not Process32Next(han, ProcStruct);
  end;
  // clean-up
  CloseHandle(han);
end;

Код, который вы предоставили, - это функция Delphi, называемая IsRunning, которая проверяет, запущен ли процесс с заданным именем на системе Windows 9x. Вот подробное описание того, что код делает:

  1. Создается снимок всех запущенных процессов с помощью функции CreateToolhelp32Snapshot из библиотеки kernel32.
  2. Инициализируется структура PROCESSENTRY32, чтобы хранить информацию о каждом процессе.
  3. Код затем проходит по списку процессов, используя функции Process32First и Process32Next, которые возвращают следующий процессный вход в снимке.
  4. Для каждого процесса извлекается имя исполняемого файла с помощью функции ExtractFileName из модуля SysUtils.
  5. Проверяется, если извлеченное имя совпадает с заданным именем процесса (игнорируя регистр) сравнивая верхний регистр обеих строк с помощью функций Copy и Uppercase.
  6. Если найдено совпадение, то переменная Result устанавливается в true и цикл заканчивается.
  7. Наконец, закрыт handle снимка с помощью функции CloseHandle.

Альтернативное решение может быть использовать API OpenProcess и GetExitCodeProcess, чтобы проверить, запущен ли процесс, но это требует больше усилий и знаний Windows API.

Вот пример использования этих API:

function IsRunning(sName: string): boolean;
var
  hProcess: THandle;
begin
  Result := false;
  hProcess := OpenProcess(PROCESS_QUERY_INFORMATION, False, StrToIntDef(GetProcessIdFromName(sName), 0));
  if hProcess <> 0 then
  begin
    Result := True;
    CloseHandle(hProcess);
  end;
end;

function GetProcessIdFromName(sName: string): string;
var
  sID: string;
begin
  // Implement your own logic to get the process ID from the name
  // For example, you can use a dictionary to map process names to IDs
  Result := '12345';  // Replace with actual ID
end;

Обратите внимание, что это подход требует больше работы и знаний Windows API, но предоставляет более гибкость и контроль над проверкой процессов.

Рассмотрена проблема определения запущенного процесса в операционной системе Windows 9x с помощью функции CreateToolhelp32Snapshot и Process32First/Process32Next, а также предложено программное решение на языке Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Процессы и Сервисы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 12:38:51/0.0031540393829346/0