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

Использование JCL для получения полного пути к исполняемым файлам запущенных процессов

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

Как получить полный путь к исполняемым файлам запущенных процессов с помощью JCL

При работе с процессами в операционных системах семейства Windows часто возникает необходимость получения полного пути к исполняемым файлам этих процессов. В контексте разработки на Delphi и использовании Object Pascal, одной из популярных библиотек для работы с системной информацией является JCL (Joint Code Library).

Проблема

При использовании функции JclSysInfo.RunningProcessesList для получения списка запущенных процессов, вы можете столкнуться с ситуацией, когда некоторые из процессов возвращаются только с именами исполняемых файлов, в то время как другие содержат полный путь к файлу. Например:

dopus.exe
C:\Program Files\Listary\Listary.exe
C:\Program Files (x86)\Direct Folders\df.exe
Everything.exe
...

Решение

Для получения полного пути к исполняемым файлам всех процессов, вы можете использовать функцию Windows API QueryFullProcessImageName, которая доступна начиная с Windows Vista. Эта функция требует меньших прав доступа, чем GetModuleFileNameEx, и может быть использована в случае, если невозможно открыть обработчик процесса.

Вот пример кода на Object Pascal, который демонстрирует использование QueryFullProcessImageName для получения полного пути к исполняемым файлам процессов:

program GetFullPathOfRunningProcesses;

{$APPTYPE CONSOLE}

uses
  ..., JclSysInfo, Windows;

procedure GetFullPathOfProcess(processId: DWORD; var fullPath: string);
var
  bufferSize: DWORD;
begin
  // Определяем размер буфера для полного пути
  bufferSize := SizeOf(fullPath);
  if not QueryFullProcessImageName(processId, 0, PChar(fullPath), bufferSize) then
  begin
    // Обработка ошибки, например, получение кода ошибки
    raise LastWin32Error;
  end;
end;

procedure GetRunningProcesses;
var
  processInfo: TProcessInformation;
  fullPath: string;
begin
  fullPath := StringOfMaxSize; // Инициализация строки с максимально возможным размером

  // Итерация по всем процессам
  if OpenProcessSnapshot then
  try
    repeat
      if ReadProcessSnapshot(processInfo) then
      begin
        // Получаем полный путь к исполняемому файлу
        GetFullPathOfProcess(processInfo.ProcessID, fullPath);
        // Выводим информацию о процессе
        Writeln('Process ID: ', processInfo.ProcessID, ', FullPath: ', fullPath);
      end;
    until not ReadProcessSnapshot(processInfo);
  finally
    CloseProcessSnapshot;
  end;
end;

begin
  GetRunningProcesses;
  Readln;
end.

Обратите внимание, что для работы с QueryFullProcessImageName вам потребуется открыть обработчик для каждого процесса, что может потребовать определенных прав доступа.

Комментарии и дополнительная информация

  • Процесс "Everything" запускается с повышенными правами. Попробуйте запустить ваше приложение аналогично.
  • При компиляции программы для 64-битной архитектуры количество процессов с полным путем к файлу увеличивается. Однако это не гарантирует, что все процессы будут возвращены с полным путем.
  • Использование QueryFullProcessImageName может быть ограничено из-за прав доступа. Если не удается открыть обработчик процесса, то и получить полный путь не получится.

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

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

Как получить полный путь к исполняемым файлам запущенных процессов, используя библиотеку JCL для разработки на Delphi и функции Windows API.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 10:59:04/0.0060439109802246/0