Сегодня 01 декабря 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
Тренды 🔥
Ранний доступ экшена Into the Fire о выживании на разбушевавшемся вулканическом хребте стартует в 2026 году 11 ч.
ИИ-модель Alibaba Qwen3-VL способна уловить почти все детали двухчасового видео, лишь раз его «просмотрев» 13 ч.
Аудитория условно-бесплатного ролевого экшена Where Winds Meet выросла до 9 млн за две недели после релиза 15 ч.
Психологический хоррор The 9th Charnel о группе пропавших учёных-генетиков получил дату релиза 15 ч.
Google отозвала жалобу на Microsoft по поводу антиконкурентной практики Azure псле запуска расследования в ЕС 18 ч.
Кооперативное приключение Split Fiction получило неофициальную русскую озвучку от Mechanics VoiceOver 21 ч.
Сборник хорроров Layers of Fear: The Final Masterpiece Edition от авторов ремейка Silent Hill 2 выйдет на Nintendo Switch 2 уже 19 декабря 22 ч.
Инвесторы не спешат пугаться ИИ-пузыря — деньги в стартапы льются как прежде 23 ч.
Новая статья: Goodnight Universe — колыбельная для крошки. Рецензия 30-11 00:01
Новая статья: Gamesblender № 754: кризис на рынке памяти, Pioner не для российского Steam и 20-летие Xbox 360 29-11 23:39
Sony Bank выпустит в США стейблкоин для упрощения расчётов в экосистеме материнской компании 22 мин.
Новая статья: Компьютер месяца — декабрь 2025 года 8 ч.
Для невышедших Intel Xeon Granite Rapids-WS уже представлена материнская плата Adlink ISB-W890 формата CEB 14 ч.
Вьетнам годами не пускал китайское 5G-оборудование Huawei и ZTE, но новые пошлины США, похоже, заставили власти передумать 14 ч.
AMD случайно подтвердила подготовку Ryzen 7 9850X3D — до анонса осталось чуть больше месяца 15 ч.
Samsung станет крупнейшим производителем телевизоров 20-й год подряд, несмотря на натиск китайских конкурентов 16 ч.
Ускорители вычислений Baidu имеют все шансы стать хитом китайского рынка 24 ч.
SK hynix запустит тотальное расширение фабрик памяти DRAM, чтобы победить дефицит 24 ч.
Micron инвестирует $9,6 млрд в завод по производству памяти HBM в Японии 30-11 00:31
Первый в мире частный научный спутник успешно выведен в космос — он будет изучать звёзды в ультрафиолете 29-11 18:57