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