Форум: "WinAPI";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];
ВнизПолучение списка иконок из экзешника по хендлу окна этого приложе Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.044 c