Сегодня 25 ноября 2025
18+
MWC 2018 2018 Computex IFA 2018
реклама
Программное обеспечение

Самый быстрый способ получить заголовок окна в Windows NT/2000

Автор: Ашот Оганесян

В продолжении моей предыдущей статьи, я решил описать еще одну интересную и по каким-то причинам недокументированную ф-цию из библиотеки User32.dll.

Я обнаружил эту ф-ции исследуя NT Task Manager (Диспетчер Задач). Надо сказать, эта программа содержит большое кол-во недокументированных ф-ций и безусловно представляет огромный интерес для исследователя внутренностей ОС. Ф-ция InternalGetWindowText обеспечивает самый быстрый механизм получения заголовка указанного окна. Эта ф-ция очень похожа на документированную GetWindowText, но в отличии от последней работает только с юникодом и реализованна через вызов прерывания INT 2E (т.е. не использует априори медленный механизм оправки/получения сообщений), что конечно, значительно повышает скорость. InternalGetWindowText существует и в Windows 95/98, но только как заглушка и вся ее реализация заключается в установке ошибки ERROR_CALL_NOT_IMPLEMENTED и возврате FALSE.

Вот прототип для ф-ции InternalGetWindowText:

BOOL InternalGetWindowText (
HWND hWnd, // описатель окна
LPWSTR lpString, // указатель на буфер, куда записывается заголовок (только юникод!!!)
int nMaxCount, // максимальное кол-во символов, копируемое в буфер
);

Естественно нам придется динамически загружать ф-цию, напрямую из User32.dll:

typedef BOOL (WINAPI *PROCINTERNALGETWINDOWTEXT)(HWND,LPWSTR,int);

PROCINTERNALGETWINDOWTEXT InternalGetWindowText;

HMODULE hUser32 = GetModuleHandle("user32");

InternalGetWindowText = (PROCINTERNALGETWINDOWTEXT)
GetProcAddress(hUser32,"InternalGetWindowText");

Для меня остается загадкой, зачем разработчики (а может менеджеры?) спрятали эту ф-цию? Еще одна странность - почему в реализации ф-ции GetWindowText не использована InternalGetWindowText (как это часто делается со многими другими ф-циями Win32 API, внутри реализованными через вызов ф-ций Native API)?

Ну что же, теперь мы все можем и все умеем, осталось только написать маленький работающий пример: fastgetwndtext.zip (15Kb)

Оригинал этой статьи на английском языке лежит здесь: Trick 3

Не документированные ф-ции Windows NT и Windows 95/98 и описания на английском языке: www.codepile.com

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

window-new
Soft
Hard
Тренды 🔥
Google отчаянно защищает AdX от принудительной продажи: отделить рекламный бизнес технически невозможно 2 ч.
Ошибка Windows 11 24H2 приводит к сбоям в «Проводнике» и меню «Пуск» 3 ч.
ИИ оказался слишком рискованным даже для страхования от рисков 6 ч.
Anthropic бросает вызов Gemini 3: представлена мощная ИИ-модель Opus 4.5 и инструмент для покорения Excel 11 ч.
Маск ударил по фабрикам троллей: X начала показывать местоположение аккаунтов 12 ч.
Календарь релизов 24 – 30 ноября: Of Ash and Steel, Project Motor Racing и Hail to the Rainbow 13 ч.
В Steam стартовала распродажа «Чёрная пятница» и голосование за лучшие игры 2025 года 13 ч.
Внедрение облачных технологий увеличивает прибыль компаний, показало исследование Yandex B2B Tech и «Яков и Партнёры» 13 ч.
Научно-фантастическое выживание StarRupture от авторов Green Hell скоро дадут попробовать с друзьями — анонсировано кооперативное тестирование 14 ч.
Дископанковый шутер RetroSpace в духе System Shock получил новый геймплейный трейлер и сроки выхода 16 ч.
Сооснователь Google Ларри Пейдж стал вторым богатейшим человеком в мире благодаря Gemini 3 3 ч.
Apple запустила редкую волну сокращений: работы лишились десятки специалистов по продажам 4 ч.
Новая статья: Тестируем DDR5-6000 CL26 — память, которой не хватало Ryzen 9 ч.
Honor представила смарт-часы Watch X5 в стиле Apple Watch со 120 спортивными режимами за $63 11 ч.
Новая статья: Обзор и тестирование корпуса Chieftec Night Hunter: всё что нужно и ничего лишнего 11 ч.
Россияне стали реже менять смартфоны и всё чаще выбирают дешёвую электронику 11 ч.
Amazon показала антенну Leo Ultra для спутникового интернета на 1 Гбит/с — в 2,5 раза быстрее Starlink 12 ч.
Представлены Honor 500 и Honor 500 Pro — смартфоны с дизайном iPhone Air и батареями на 8000 мА·ч по цене от $380 12 ч.
Steam Machine дешёвой не будет: Valve не станет продавать мини-ПК себе в убыток по консольной модели 14 ч.
Дешевле купить PS5: из-за дефицита комплект DDR5 на 64 Гбайт взлетел до $600 15 ч.