Сегодня 05 октября 2026
18+
MWC 2018 2018 Computex IFA 2018
реклама
Программное обеспечение

Получения HWND оболочки Windows

Автор: Ашот Оганесян

Иногда нужно получить описатель (HWND) главного окна для текущей оболочки (shell) Windows, обычно такой оболочкой является explorer (внутреннее имя - progman). HWND этого окна может понадобиться, например для посылки каких-то управляющих сообщений и т.п.

Документайия Микрософт (MSDN в частности) предлагает нам на первый взгляд очень простое решение - использовать ф-цию FindWindow:

HWND hwndShell = FindWindow("Progman", NULL);

Но что-то мне в этом решении не нравится. Во первых, где гарантия того, что имя оконного класса всегда будет "progman". Во вторых, ф-ция FindWindow использует механизм обмена сообщениями (get/send message) и из-за этого является довольно медленной. И наконец, Win32 API содержит специальную ф-цию, созданную именно для получения HWND оболочки! Как всегда причины, по которым, разработчики скрыли эту ф-цию мне не понятны, но это и не очень важно, ф-ция GetShellWindow прекрасно работает. Вот ее прототип:

HWND GetShellWindow ();

Думаю, можно не описывать ф-цию подробнее, она настолько простая, что необходимость в словах отпадает сама-собой.

Естественно загружать ф-цию придется динамически, напрямую из User32.dll:

typedef HWND (WINAPI *PROCGETSHELLWND)();

PROCGETSHELLWND GetShellWindow;

HMODULE hUser32 = GetModuleHandle("user32");

GetShellWindow = (PROCGETSHELLWND)
GetProcAddress(hUser32,"GetShellWindow");

Ну что же, теперь мы все можем и все умеем, осталось только написать маленький работающий пример: getshellwnd.zip (15Kb)

Оригинал этой статьи на английском языке лежит здесь: Trick 4

Недокументированные ф-ции Windows NT и Windows 95/98 и описания на английском языке: www.codepile.com

Было интересно? Скажите об этом Google, чтобы чаще получать ссылки на наши новости про другое
 
 
Если Вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.

window-new
Soft
Hard
Тренды 🔥
Новая статья: Control Resonant — дуализм прекрасного. Рецензия 04-10 00:05
Дорогие видеокарты не остановили покупки игр — Steam показала рекордный сентябрь 03-10 23:53
ФБР серьёзно взялось за хакеров ShinyHunters, взломавших ФБР — задержан ещё один подозреваемый 03-10 23:20
Capcom сделает RE Engine игровым движком для разработки с помощью ИИ 03-10 19:10
ИИ-агент OpenAI узнал о предстоящем отключении из переписки в Slack и планировал своё «спасение» 03-10 18:15
Microsoft готовит Windows и Surface к чипам Nvidia — подробности раскроют 7 октября 03-10 16:58
ИИ научился притворяться человеком в видеозвонках — модель Griffin прошла «видеотест Тьюринга» 03-10 15:00
OpenAI покинул глава команды безопасности — он сомневался, что компания успевает за собственным ИИ 03-10 14:47
Gemini 4 хороша в тестах, но буксует в работе — пожаловались сотрудники Google 03-10 10:19
Apple ужесточит контроль над «полным доступом к диску» в macOS из-за рисков, связанных с ИИ-агентами 03-10 07:43
Новая статья: Компьютер месяца — октябрь 2026 года 8 ч.
ИИ-бум успеет поменять мир прежде, чем закончатся деньги инвесторов 20 ч.
«Ночью все кошки серы»: Илон Маск пояснил, почему роботакси не обслуживают клиентов глубокой ночью 24 ч.
Трамп нашёл нового «ИИ-царя» — «Силами сверхинтеллекта» будет руководить глава нацразведки 24 ч.
Цены на HBM в следующем году увеличатся более чем в два раза 04-10 06:22
ASRock Industrial выпустила мини-компьютеры NUC Core 300 Box на платформе Intel Wildcat Lake 03-10 20:54
JEDEC представила первый в отрасли стандарт для кремниевой фотоники 03-10 20:53
Купленный с рук Ryzen достался новому владельцу вместе с «баном» в Valorant — античит узнал процессор читера 03-10 17:16
Чиповый мегапроект Маска стоимостью $119 млрд может получить поддержку TSMC 03-10 13:58
Samsung запустила серийное производство чипов Exynos 2700, но решение по Galaxy S27 Ultra ещё не принято 03-10 13:38