Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.06;
Скачать: CL | DM;

Вниз

Получение списка иконок из экзешника по хендлу окна этого приложе   Найти похожие ветки 

 
leonidus ©   (2006-12-08 14:54) [0]

Мастера подскажите пожалуйста, у меня есть хендл окна, как мне узнать к какому приложению это окно относится и как следствие путь к его экзешнику, для того что бы выковырять из него иконки?


 
novill ©   (2006-12-08 15:35) [1]

как вариант первого шага  GetWindowThreadProcessId


 
leonidus ©   (2006-12-08 15:46) [2]

Ок, получу я идентификатор породившего окно потока что дальше делать.


 
Орион ©   (2006-12-08 16:02) [3]


 TProcessBasicInformation = record
   ExitStatus: Integer;
   PebBaseAddress: Pointer;
   AffinityMask: Integer;
   BasePriority: Integer;
   UniqueProcessID: Integer;
   InheritedFromUniqueProcessID: Integer;
 end;

function GetPathFromId(Id: DWord): string;
var
ProcessHandle: THandle;
ProcInfo: TProcessBasicInformation;
BytesRead: DWord;
Usr, Buf: DWord;
Len: Word;
Buffer: PWideChar;
begin
Result:="";
ZeroMemory(@ProcInfo, SizeOf(TProcessBasicInformation));
if GetProcessHandle(Id, ProcessHandle, PROCESS_QUERY_INFORMATION or PROCESS_VM_READ) then
begin
 if NT_SUCCESS(NtQueryInformationProcess(ProcessHandle, ProcessBasicInformation, @ProcInfo, SizeOf(TProcessBasicInformation), nil)) then
 begin
  ReadProcessMemory(ProcessHandle, Pointer(DWord(ProcInfo.PebBaseAddress)+$10), @Usr, 4, BytesRead);
  ReadProcessMemory(ProcessHandle, Pointer(Usr+$38), @Len, 2, BytesRead);
  GetMem(Buffer, Len);
  try
   ReadProcessMemory(ProcessHandle, Pointer(Usr+$3C), @Buf, 4, BytesRead);
   ReadProcessMemory(ProcessHandle, Pointer(Buf), Buffer, Len, BytesRead);
   Result:=WideCharToString(Buffer);
  finally
   FreeMem(Buffer);
  end;
  SetLength(Result, Len div 2);
 end;
 NtClose(ProcessHandle);
end;
end;


 
Орион ©   (2006-12-08 16:03) [4]

это для определение пути к екзешнику.
Дальше извлекаешь иконки из файла. Благо в интернете примеров навалом.


 
novill ©   (2006-12-08 16:06) [5]

Если я знал точное решение, я бы написал.

Потом можно попробовать GetModuleFileName. Но если потом неосновной, сработает ли - я не знаю. Возможно надо будет искать родителя.

ЗЫ Если получится - выложи код.


 
leonidus ©   (2006-12-08 16:23) [6]

Орион, на вход вашей функции подаем хендл id потока возаращаемый  GetWindowThreadProcessId ?


 
Орион ©   (2006-12-08 16:31) [7]

> [6] leonidus ©   (08.12.06 16:23)

передаем ProcessID.

DWORD GetWindowThreadProcessId(
   HWND hWnd, // handle of window
   LPDWORD lpdwProcessId  // address of variable for process identifier
  );


 
Орион ©   (2006-12-08 16:33) [8]

+ для того чтобы GetPathFromId работала нужен файлик Native.pas, который также можно найти в сети.
И небольшая оговорка: работать, естественно, будет только на NT-системах.


 
BiN ©   (2006-12-09 00:23) [9]


> Орион ©   (08.12.06 16:02) [3]

Всё то же самое делается одной функцией  GetModuleFileNameEx


 
Орион ©   (2006-12-09 00:44) [10]

> [9] BiN ©   (09.12.06 00:23)

зато у моего велосипеда рама разноцветная :))



Страницы: 1 вся ветка

Текущий архив: 2007.05.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
8-1156315403
Maxim new
2006-08-23 10:43
2007.05.06
Ассоциация файлов


15-1176200252
Сергей М.
2007-04-10 14:17
2007.05.06
Цифровые фотокамеры UFO


2-1176762949
AlexeyMir
2007-04-17 02:35
2007.05.06
SELEC T


9-1149113606
TPhysics
2006-06-01 02:13
2007.05.06
Можно ли конвертировать ODE на Паскаль?


6-1162829430
NetUser
2006-11-06 19:10
2007.05.06
Пакет IP