Здравствуйте, Vis, Вы писали:
Vis>Можно ли имея HWND извлечь иконку окна, причем:
Vis>1) HWND принадлежит другому процессу.
Vis>2) Окно имеет captionbar c иконкой, видимой визуально.
Vis>Почему то WM_GETICON не работает.
Vis>Может у него какие-то ограничения на окна из другого процесса?
Ограничений нет, но WM_GETICON вернет иконку только если иконка этого типа была до этого установлена через WM_SETICON. В то же время, приложение может не вызывать WM_SETICON, а зарегистрировать иконку в классе окна.
Я когда-то написал вот такой код для получения иконки окна другого процесса:
HICON GetWindowIcon(
__in HWND hWnd
)
{
_ASSERTE(IsWindow(hWnd));
HICON hIcon = NULL;
if (SendMessageTimeout(hWnd, WM_GETICON, ICON_SMALL, 0,
SMTO_ABORTIFHUNG|SMTO_BLOCK, 1000,
(DWORD_PTR *)&hIcon))
{
if (hIcon == NULL)
{
if (!SendMessageTimeout(hWnd, WM_GETICON, ICON_BIG, 0,
SMTO_ABORTIFHUNG|SMTO_BLOCK, 1000,
(DWORD_PTR *)&hIcon))
hIcon = NULL;
}
}
else
hIcon = NULL;
if (hIcon == NULL)
hIcon = (HICON)GetClassLongPtr(hWnd, GCLP_HICONSM);
if (hIcon == NULL)
hIcon = (HICON)GetClassLongPtr(hWnd, GCLP_HICON);
if (hIcon == NULL)
hIcon = LoadIcon(NULL, IDI_APPLICATION);
return hIcon;
}
|