Сегодня 25 ноября 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
Тренды 🔥
Крупные американские страховщики требуют исключить из правил риски, связанные с ИИ 2 ч.
Anthropic бросает вызов Gemini 3: представлена мощная ИИ-модель Opus 4.5 и инструмент для покорения Excel 6 ч.
Маск ударил по фабрикам троллей: X начала показывать местоположение аккаунтов 8 ч.
Календарь релизов 24 – 30 ноября: Of Ash and Steel, Project Motor Racing и Hail to the Rainbow 8 ч.
В Steam стартовала распродажа «Чёрная пятница» и голосование за лучшие игры 2025 года 9 ч.
Внедрение облачных технологий увеличивает прибыль компаний, показало исследование Yandex B2B Tech и «Яков и Партнёры» 9 ч.
Научно-фантастическое выживание StarRupture от авторов Green Hell скоро дадут попробовать с друзьями — анонсировано кооперативное тестирование 10 ч.
Дископанковый шутер RetroSpace в духе System Shock получил новый геймплейный трейлер и сроки выхода 12 ч.
Meta «похоронила» исследование о вреде соцсетей — теперь в суде ответят и она, и TikTok, и Google 13 ч.
Российская служба каталогов ALD Pro дополнилась ИИ-помощником для системных администраторов 13 ч.
Новая статья: Тестируем DDR5-6000 CL26 — память, которой не хватало Ryzen 5 ч.
Honor представила смарт-часы Watch X5 в стиле Apple Watch со 120 спортивными режимами за $63 7 ч.
Новая статья: Обзор и тестирование корпуса Chieftec Night Hunter: всё что нужно и ничего лишнего 7 ч.
Россияне стали реже менять смартфоны и всё чаще выбирают дешёвую электронику 7 ч.
Amazon показала антенну Leo Ultra для спутникового интернета на 1 Гбит/с — в 2,5 раза быстрее Starlink 7 ч.
Представлены Honor 500 и Honor 500 Pro — смартфоны с дизайном iPhone Air и батареями на 8000 мА·ч по цене от $380 8 ч.
Steam Machine дешёвой не будет: Valve не станет продавать мини-ПК себе в убыток по консольной модели 10 ч.
Дешевле купить PS5: из-за дефицита комплект DDR5 на 64 Гбайт взлетел до $600 11 ч.
Джони Айв и Сэм Альтман создали прототип совместного ИИ-устройства, но никому его не показали 11 ч.
MSI выпустила игровой монитор MAG 274QPF X32 — 1440p, 320 Гц и консольный режим 12 ч.