I ' m с помощью прокси-библиотеки DLL для перехвата вызовов CreateWindowExA
/ CreateWindowExW
. Это работает отлично, за исключением того, что некоторые приложения (особенно некоторые приложения Visual Basic 6), похоже, могут создавать окна, не выполняя ни одну из двух функций. Такие инструменты, как Spy ++ , могут отображать окно, но мои подключенные функции не заметили их.
Мое первое подозрение заключалось в том, что, возможно, эти (старые) приложения используют CreateWindowA
/ CreateWindowW
для создания окон, но, по крайней мере, с моими компиляторами (от MSVC6 до MSVC10) CreateWindow
- это просто #define; раздел примечаний в документации подтверждает это.
Моя вторая идея заключалась в том, что я мог бы установить ловушку CBT
, используя SetWindowsHookEx
для обнаружения создания окон. Однако результат тот же: этот хук замечает те же окна, что и мои подключенные функции API, но он не замечает всех окон, которые видны в Spy ++.
Итак, мой вопрос: было ли время, когда CreateWindowA
/ CreateWindowW
было не #define, а реальной функцией? Эта функция все еще экспортируется user32.dll
, может быть, из соображений совместимости? Как я могу получить дескриптор этой функции, чтобы перехватить ее?
Или, возможно, есть другая, возможно, недокументированная функция, которая может использоваться для создания функций, например, NtCreateProcess
может использоваться вместо CreateProcess
?