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

Отслеживание статуса оконных процессов в Delphi: автоматизация информирования о закрытии программ

Delphi , Синтаксис , Ошибки и Исключения

В статье мы рассмотрим задачу отслеживания статуса оконных процессов в среде разработки Delphi. Задача заключается в регулярной проверке списка процессов, отображаемых в ListBox, на предмет их активности. Для реализации этой функции мы будем использовать таймер, который будет периодически проверять, продолжают ли существовать процессы, отображаемые в списке.

Проблема

У нас есть ListBox, который содержит список оконных процессов по их названию. Наша цель - автоматически проверять, продолжают ли эти процессы работать, и информировать об их закрытии.

Решение

Для начала, давайте рассмотрим пример кода, который позволяет проверить наличие одного процесса по его названию. Этот код можно найти на сайте SwissDelphiCenter.

uses
  Winapi.Windows;

function IsProcessRunning(const ProcessName: string): Boolean;
var
  ProcessEntry: TProcessEntry;
  SnapShot: THandle;
begin
  SnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  try
    if Process32First(SnapShot, ProcessEntry) then
    begin
      repeat
        if CompareText(ProcessEntry.szExeFile, ProcessName) = 0 then
        begin
          Result := True;
          Break;
        end;
      until not Process32Next(SnapShot, ProcessEntry);
    end;
  finally
    CloseHandle(SnapShot);
  end;
end;

Для работы с несколькими процессами, нам нужно адаптировать данный код. Мы можем создать функцию, которая принимает массив названий процессов, и проверяет их по очереди. Если процесс больше не существует, его название можно добавить в список для отображения в сообщении об ошибке после завершения проверки.

Альтернативный подход

В качестве альтернативного подхода можно использовать цикл для перебора всех имен процессов в ListBox и проверки их активности. Более изящный способ - это перезаполнение ListBox, чтобы получить список открытых процессов, и сравнение его с предыдущим состоянием.

Подтвержденный алгоритм

Алгоритм проверки статуса процессов может быть следующим:

  1. Получить список запущенных процессов и сохранить его в упорядоченном массиве, например, в виде массива идентификаторов процессов (PID).
  2. Повторно прочитать список процессов через некоторое время и сравнить его с предыдущим состоянием.
  3. Определить, какие процессы были закрыты, сравнив два списка.

Для получения списка процессов можно использовать функцию CreateToolhelp32Snapshot и структуру PROCESSENTRY32. Для сортировки массива идентификаторов процессов можно использовать алгоритм сортировки, например, QuickSort.

Пример кода для проверки списка процессов

uses
  Winapi.Windows,
  System.SysUtils;

// Функция для проверки списка процессов
function CheckProcesses(const ProcessNames: TArray<string>): TArray<string>;
var
  ProcessEntry: TProcessEntry;
  SnapShot: THandle;
  ClosedProcesses: TArray<string>;
  i: Integer;
begin
  Result := [];
  SnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  try
    if Process32First(SnapShot, ProcessEntry) then
    begin
      repeat
        for i := Low(ProcessNames) to High(ProcessNames) do
        begin
          if CompareText(ProcessEntry.szExeFile, ProcessNames[i]) = 0 then
            Break;
        end;
        if i > High(ProcessNames) then
          ClosedProcesses.Add(ProcessEntry.szExeFile);
      until not Process32Next(SnapShot, ProcessEntry);
    end;
  finally
    CloseHandle(SnapShot);
  end;
  Result := ClosedProcesses;
end;

Применение таймера

Чтобы регулярно проверять список процессов, можно использовать компонент TTimer. В событии OnTimer вызываем функцию CheckProcesses и отображаем список закрытых процессов в сообщении, если таковые имеются.

Заключение

Используя предложенные методы, вы сможете автоматизировать процесс проверки активности оконных процессов в вашем приложении на Delphi. Это может быть полезно для различных сценариев, включая мониторинг фоновых задач или управление зависимыми процессами.

Создано по материалам из источника по ссылке.

Задача заключается в автоматизации процесса проверки активности оконных процессов в среде разработки Delphi с использованием таймера для информирования о закрытии программ.


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

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




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


:: Главная :: Ошибки и Исключения ::


реклама


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

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