Сегодня 01 июня 2024
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.
Вечерний 3DNews
Каждый будний вечер мы рассылаем сводку новостей без белиберды и рекламы. Две минуты на чтение — и вы в курсе главных событий.

window-new
Soft
Hard
Тренды 🔥
Владелец Ticketmaster подтвердил утечку данных 560 млн пользователей спустя 11 дней 19 мин.
В Telegram добавили сообщения с анимированными эффектами, глобальные хештеги и другие нововведения 60 мин.
Anthropic позволит создавать персональных помощников на базе ИИ-чат-бота Claude 3 ч.
ElevenLabs запустила ИИ-генератор звуковых эффектов по текстовому описанию 3 ч.
Новая статья: Songs of Conquest — песнь величия. Рецензия 15 ч.
В ранний доступ Steam ворвался олдскульный шутер Selaco на движке классических Doom — с перестрелками и умными врагами в духе F.E.A.R. 17 ч.
Warhorse официально подтвердила перевод на русский язык в Kingdom Come: Deliverance 2 18 ч.
Perplexity AI превратит поисковую выдачу в веб-страницу, которой удобно делиться с другими 18 ч.
Google добавила редактирование RCS-сообщений и другие полезные функции в Android 19 ч.
Эндгейм подкрался незаметно: авторы перспективного «дьяблоида» Wolcen: Lords of Mayhem решили забросить разработку всего через четыре года после релиза 19 ч.
Вулканическую юпитерианскую луну Ио впервые сняли с Земли в лучшем разрешении, чем с космических аппаратов 22 мин.
Новые спутники Starlink могут уничтожить радиоастрономию на Земле, предупреждают учёные 3 ч.
Корейский профсоюз Samsung объявил забастовку, но на производство и поставки памяти это не повлияет 3 ч.
Последний «дружественный» поставщик VSAT-оборудования Gilat Satellite Networks приостановил работу в РФ 3 ч.
Samsung проиграла Huawei и больше не первая по продажам складных смартфонов в мире 3 ч.
Минцифры предлагает выдавать льготные кредиты для строительства ЦОД 4 ч.
Госархив РФ построит в Калужской области дата-центр за 1 млрд руб., оснастив его российскими серверами и СХД Depo 4 ч.
В метеорите с Марса учёные разглядели образ древней Земли 4 ч.
Blackview выпустила защищённый смартфон Oscal Pilot 2 с двумя экранами и мини-ПК MP100 с мощной начинкой 4 ч.
Робот-пылесос Dreame D9 Max и вертикальный беспроводной пылесос R20 обеспечат качественную и быструю уборку 6 ч.