Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как узнать имя файла по дескриптору его окна (32-бит и 64-бит)? / 3 сообщений из 3, страница 1 из 1
12.07.2020, 17:01
    #39978674
crossa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать имя файла по дескриптору его окна (32-бит и 64-бит)?
Возникла задача получить имя файла и путь к нему, зная дескриптор (хэндл) его окна. Раньше использовал такой код:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
uses PSAPI, SysUtils;

function GetModulesFromProcessID(ProcessID: THandle): String;
var hProcess: THandle;
  NeededBytes: DWORD;
  phModule: PDWORD;
  ModuleName: array[0..1024] of Char;
begin
  Result := '';
  hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessID);
  if hProcess <> 0 then
  begin
    try
      phModule := nil;
      if EnumProcessModules(hProcess, phModule, 0, NeededBytes) then
      begin
        GetMem(phModule, NeededBytes);
        try
          if EnumProcessModules(hProcess, phModule, NeededBytes, NeededBytes) then
          begin
               if GetModuleFileNameEx(hProcess, phModule^, @ModuleName, SizeOf(ModuleName)) > 0 then
                  Result:=ModuleName;
          end;
        finally
          FreeMem(phModule);
        end;
      end;
    finally
      CloseHandle(hProcess);
    end;
  end;
end;

function GetModulesFromWindowHandle(hWND: HWND): String;
var ProcessID: THandle;
begin
  Result := '';
  if GetWindowThreadProcessId(hWND, ProcessID) <> 0 then 
     Result := GetModulesFromProcessID(ProcessID);
end;


Но при использовании этой функции в 32-битной программе удастся узнать имя файла только для запущенных 32-битных приложений. Есть ли простой и быстрый способ получать полные имена файлов для 32-битных и 64-битных приложений, зная дескрипторы их окон?
...
Рейтинг: 0 / 0
12.07.2020, 17:10
    #39978675
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать имя файла по дескриптору его окна (32-бит и 64-бит)?
crossa,

а ошибку-то какую возвращает?
...
Рейтинг: 0 / 0
12.07.2020, 17:18
    #39978676
crossa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать имя файла по дескриптору его окна (32-бит и 64-бит)?
Прошу прощения, уже нашел работающее решение:
https://stackoverflow.com/questions/22285024/how-to-get-a-systems-process-path-from-pid-in-a-64-bit-system/22286210#22286210
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как узнать имя файла по дескриптору его окна (32-бит и 64-бит)? / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]