Сегодня 15 июля 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

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

window-new
Soft
Hard
Тренды 🔥
Второй раунд внешнего финансирования увеличит капитализацию DeepSeek до $71 млрд 35 мин.
Суд отклонил обвинения в адрес Apple в несоблюдении закона о защите детей в Сети на платформе iCloud 54 мин.
Meta отвергла обвинения в использовании ИИ для отбора сотрудников под увольнение 5 ч.
Партийная RPG с японским колоритом Expeditions: Samurai прорубит дорогу в ранний доступ Steam уже совсем скоро — новый трейлер и дата выхода 10 ч.
Spotify превратил поиск музыки в простой диалог с ИИ 10 ч.
Короткие ссылки Telegram снова работают: домен t.me восстановился спустя сутки после отключения 11 ч.
Telegram получил мощный редактор статей, сообщества и 350 млн GIF 12 ч.
«В таком климате вы никогда не дождётесь новой WoW или Morrowind»: продюсер Doom: The Dark Ages обрушился с критикой на владельцев игровой индустрии 14 ч.
Еврокомиссия одобрила обязательства SAP по устранению нарушений антиконкурентного законодательства 14 ч.
Вышел релиз OpenIDE Pro — корпоративной версии российской интегрированной среды разработки 15 ч.
IPO китайского производителя памяти CXMT на сумму $8,5 млрд станет крупнейшим в истории национальной полупроводниковой отрасли 2 ч.
Nvidia лишь недавно отгрузила в Китай небольшое количество ускорителей H200 2 ч.
Первым устройством OpenAI станет умная колонка 4 ч.
Meta готовится раскрыть подробности новых VR-гарнитур на Connect 2026 в сентябре 5 ч.
Arm-процессоры Graviton5 оказались быстрее Intel Xeon 6, но отстали от AMD EPYC Turin в тестах инстансов AWS 7 ч.
ЕС разрешил не делать батареи в Apple Watch и других носимых гаджетах сменными 8 ч.
Робопсу Spot от Boston Dynamics нашли новую работу — теперь он доставляет посылки 9 ч.
Новая статья: Обзор видеокарты Acer Nitro Intel Arc B570 OC 9 ч.
GAC Aion RT установил мировой рекорд по самому низкому энергопотреблению среди электромобилей 9 ч.
«Союз МС-29» привёз на МКС американца и двух россиян для испытаний робота-аватара и новых космических технологий 10 ч.