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

Как получить список файлов, открытых приложением в среде Delphi

Delphi , Синтаксис , Справочник по API-функциям

Как получить список файлов, открытых приложением в среде Delphi

Для того чтобы получить список файлов, открытых определённым приложением в среде Delphi, можно использовать различные подходы. Один из них заключается в использовании нативного API функции NtQuerySystemInformation, которая позволяет перечислить все открытые дескрипторы (handlers) из всех процессов.

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

program ListAllHandles;

{$APPTYPE CONSOLE}

uses
  PSApi,
  Windows,
  SysUtils;

const
  SystemHandleInformation       = $10;
  STATUS_SUCCESS               = $00000000;
  STATUS_BUFFER_OVERFLOW        = $80000005;
  STATUS_INFO_LENGTH_MISMATCH   = $C0000004;
  DefaultBufferSize              = $100000;

type
  OBJECT_INFORMATION_CLASS = (ObjectBasicInformation, ObjectNameInformation, ObjectTypeInformation, ObjectAllTypesInformation, ObjectHandleInformation);
  SYSTEM_HANDLE = packed record
    uIdProcess: ULONG;
    ObjectType: UCHAR;
    Flags: UCHAR;
    Handle: Word;
    pObject: Pointer;
    GrantedAccess: ACCESS_MASK;
  end;
  // ... (продолжение типов и функций)

procedure EnumerateOpenFiles;
var
  // ... (переменные для процедуры)
begin
  // ... (инициализация и подготовка буфера)
  NTQuerySystemInformation := GetProcAddress(GetModuleHandle('NTDLL.DLL'), 'NtQuerySystemInformation');
  if (@NTQuerySystemInformation <> nil) then
  begin
    // ... (продолжение процедуры перечисления файлов)
    for aIndex := 0 to pHandleInfo^.uCount - 1 do
    begin
      // ... (проверка и открытие процесса для получения дополнительной информации)
      if (hProcess <> INVALID_HANDLE_VALUE) then
      begin
        // ... (получение копии дескриптора)
        if DuplicateHandle(hProcess, pHandleInfo.Handles[aIndex].Handle, GetCurrentProcess(), @hObject, STANDARD_RIGHTS_REQUIRED, FALSE, 0) then
        begin
          // ... (получение имени файла, связанного с дескриптором)
          if (lpwsName <> nil) then
          begin
            // ... (получение типа объекта и имени процесса)
            Writeln('PID      ', pHandleInfo.Handles[aIndex].uIdProcess);
            Writeln('Handle   ', pHandleInfo.Handles[aIndex].Handle);
            Writeln('Process  ', sDummy);
            Writeln('FileName ', string(lpwsName));
            Writeln;
            // ... (освобождение памяти)
          end;
          CloseHandle(hObject);
        end;
        CloseHandle(hProcess);
      end;
    end;
  end;
  FreeMem(pHandleInfo);
end;

begin
  try
    // ... (попытка выполнения процедуры перечисления файлов)
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

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

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

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

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

Контекст: Для получения списка файлов, открытых приложением в среде Delphi, можно использовать нативный API для перечисления открытых дескрипторов файлов в системе.


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

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




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


:: Главная :: Справочник по API-функциям ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 14:23:08/0.0033941268920898/0