Показать сообщение отдельно
  #2  
Старый 16.05.2024, 21:24
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А тебе у своего окна или у чужого.
Если у своего, то тут все просто. В качестве иконки окна (если ты сам не назначал иконку отдельному окну, а в этом случае ты уже ее имеешь) всегда используется иконка приложения, а она доступна через Aplication.Icon.
Если надо получить иконку чужого окна, то тут немного сложнее. Исходя из задачи, как я понимаю, хэндл нужного окна у тебя уже должен быть. Тогда по хэндлу окна через GetWindowThreadProcessId получаем ID процесса, по ID процесса через GetModuleFileNameEx (см https://stackoverflow.com/questions/...d-using-delphi) получаешь путь к программе, ну а дальше вызываешь ExtractAssociatedIconW (см доку https://learn.microsoft.com/en-us/wi...ssociatediconw) для получения хэндла иконки. А далее делаешь что-то типа такого:
Код:
var 
  IconHndl : THandle;
  Icon : TIcon;
begin
  IconHndl := GetIconHandleByWnd(WndHandle);
  Icon := TIcon.Create;
  Try
    Icon.Handle := IconHndl;
    Form1.Canvas.Draw(0,0,Icon); // Это просто для примера, вроде так...
  Finally
    Icon.Free;
  End;
Ответить с цитированием