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

Как получить полный путь к файлу в Windows Picture Viewer с помощью Delphi ```delphi // Получение полного пути к файлу в Windows Picture Viewer ```

Delphi , ОС и Железо , Windows

Как получить полный путь к файлу в Windows Picture Viewer с помощью Delphi

Для начала разберемся с задачей. Пользователь разрабатывает "add-on" для Windows Picture Viewer, который должен отправлять команды в этот процесс и получать путь к текущему изображению. Пользователь смог реализовать отправку команд через SendMessage, но не знает, как запросить информацию от процесса. В качестве альтернативы, он пытался извлечь имя файла из заголовка окна, но это ограничивало использование только одной папки, а нужно было получить полный путь.

В ходе поиска пользователь нашел, что есть возможность получить список всех дескрипторов, используемых процессом, с помощью функции __NTQuerySystemInformation__. Однако, примеры, которые он нашел, не показывали дескрипторы файлов, а также оказалось, что Windows Picture Viewer не держит дескриптор к просмотренному файлу, когда он запущен из проводника.

Комментарии к вопросу указывают, что легальным способом это сделать можно только в том случае, если программа имеет SDK или документированный API, или поддерживает пользовательские добавления. Также обсуждались альтернативные способы, такие как анализ компонентов окна просмотра или "подглядывание" в память процесса, но это может привести к тому, что антивирусные программы распознают приложение как вредоносное.

Подтвержденный ответ заключается в том, что можно получить "Current Directory" процесса, как это показано в Process Explorer. На основе статьи "Two ways to get the command line of another process using Delphi" от RRUZ, можно получить CurrentDirectory, найденный в структуре RTL_USER_PROCESS_PARAMETERS (offset 36).

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

function GetCurrentDirectoryFromPid(PID: THandle): string;
var
  // Описание структур и констант
  // ...
begin
  Result:='';
  // Открытие токена текущего процесса и настройка привилегий
  // ...
  // Получение дескриптора процесса и чтение информации из памяти
  // ...
  // Получение текущего каталога процесса
  // ...
end;

При использовании этого кода важно правильно работать с GetWindowThreadProcessId, возвращая ProcessID, а не ThreadID. Также стоит учитывать, что в зависимости от версии Windows и способа запуска Windows Picture Viewer, его "Current Directory" может быть не тем, что требуется, например, при запуске двойным кликом на изображение, когда Viewer существует как отдельная нить внутри explorer.exe.

Вывод

Для получения полного пути к файлу в Windows Picture Viewer с помощью Delphi, можно использовать функцию GetCurrentDirectoryFromPid, которая позволяет получить текущий каталог процесса. Однако, важно учитывать особенности работы Viewer, такие как его запуск из командной строки или через контекстное меню, в отличие от запуска двойным кликом, когда Viewer работает как часть explorer.exe.

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

Разработчик add-on для Windows Picture Viewer в Delphi пытается получить полный путь к файлу, используя функции для работы с процессами и их памятью.


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

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




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


:: Главная :: Windows ::


реклама


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

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