Сегодня 19 ноября 2025
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

 
 
Если Вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.

window-new
Soft
Hard
Тренды 🔥
Австралиец погиб, не сумев вызвать скорую с Samsung Galaxy — на смартфоне не было обновлено ПО 18 мин.
Люди начали массово заводить романы с ИИ — доходит до виртуальных браков и детей 38 мин.
Игры на движке Unity скоро появятся в Fortnite — Epic Games и Unity заключили «уникальное партнёрство» 46 мин.
Google назвала лучшие приложения и игры «Play Маркета» за 2025 год 2 ч.
«Сырая и сломанная, но всё ещё прекрасная»: возрождённая ролевая песочница Hytale в духе Minecraft получила 16 минут геймплея, и фанаты в восторге 2 ч.
Авторы ремейка «Готики» рассказали и показали, как прокачали боевую систему благодаря отзывам игроков 3 ч.
Microsoft исправила проблему с установкой первого платного обновления безопасности для Windows 10 3 ч.
«Мы подвели весь интернет»: технический директор Cloudflare извинился за сбой, уронивший половину интернета 3 ч.
Релиз почтового сервера RuPost 4.0: поддержка геокластеризации и повышенная безопасность 4 ч.
Capcom похвасталась продажами Dragon’s Dogma 2 — игроки требуют обещанных улучшений и DLC 5 ч.
Новым ИТ-директором с Intel поделилась Adobe 17 мин.
Xpeng собралась выпустить миллион человекоподобных роботов по цене электромобиля — как Tesla 39 мин.
Немцы совершили прорыв в создании квантовых повторителей для «запутанного» интернета 51 мин.
Самый протяжённый в мире подводный интернет-кабель Meta 2Africa охватил треть населения Земли 55 мин.
В ближайшие месяцы DRAM подорожает ещё на 50 %, а Nvidia придётся оснащать ИИ-ускорители смартфонной памятью 2 ч.
Jeep представила электрический внедорожник Recon со съёмными дверями и задними стёклами за $65 000 2 ч.
«Яндекс» выпустил «Станцию 3» мощностью 50 Вт с окружающей подсветкой и пиксельным дисплеем 3 ч.
DJI начала продажи экшн-камеры Osmo Action 6 с квадратным сенсором по цене от €379 3 ч.
Второй европейский экзафлопсный суперкомпьютер Alice Recoque получит чипы AMD EPYC Venice и ускорители Instinct MI430X 3 ч.
Ровер Perseverance нашёл на Марсе камень, которого там не должно было быть 3 ч.