Сегодня 26 октября 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
Тренды 🔥
Лучше бы молчали: власти США считают, что апокалиптические прогнозы ИИ-лидеров лишь сеют хаос 20 ч.
Основные облачные вычислительные мощности Amazon забронированы на весь 2027 год 24 ч.
AMD готовит официальный драйвер для разгона процессоров Ryzen под Linux 25-10 11:03
Новая статья: Order of the Sinking Star — королева головоломок. Рецензия 25-10 09:35
YouTube начнёт переходить на AV2 в начале 2027 года — новый кодек сжимает видео на 30 % лучше AV1 24-10 16:22
Основатель Twitter представил голосовой ИИ, обученный с нуля только на человеческой речи 24-10 12:14
Moonshot AI выпустила Kimi K3.1 Pro, которая обошла все модели OpenAI и почти догнала Claude Opus 5.5 24-10 10:17
«Цунами уязвимостей» надвигается: эксперты предупредили, что дальше будет только хуже, но потом станет лучше 24-10 10:07
OpenAI возобновила обучение ИИ-моделей, но не пускает их в интернет 24-10 09:03
DeepSeek и MiniMax получили право разворачивать свои ИИ-модели за пределами Китая 24-10 05:16
Китай обходит санкции США через облака: к 2027 году он получит мощности 2,8 млн NVIDIA H100 41 мин.
Новые MacBook Pro с OLED получат macOS 27 с оптимизациями для сенсорного управления 3 ч.
Intel Granite Rapids и 12 накопителей NVMe: представлен сервер хранения ASRock Rack 1U12E-GNR2/EVAC 3 ч.
ASUS выпустила JBOD-массив VS320D-RS78J с поддержкой 78 накопителей 3 ч.
Новая статья: Обзор realme 16 Pro Harry Potter Edition: чем хорош самый волшебный смартфон 2026 года 12 ч.
Владимир Путин поручил правительству увеличить производство систем иммерсионного охлаждения для ЦОД 13 ч.
ZTE представила модульный ЦОД для ИИ мощностью 250 кВт с воздушным и жидкостным охлаждением 21 ч.
Беспроводная мышь-трансформер: Logitech Pebble Up может менять форму для более удобного хвата 22 ч.
Грузинское облако Silk Cloud предложит ИИ-ускорители NVIDIA Blackwell в следующем году 24 ч.
Zotac выпустила индустриальный мини-компьютер ZBox Pro CM5-Pico на базе Raspberry Pi CM5 24 ч.