有没有人遇到以下问题? 我写了一个dll加载到另一个进程,以获取该进程中窗口的EVENT_OBJECT_VALUECHANGE事件。代码如下所示。
void CALLBACK WinEventProc(
HWINEVENTHOOK hWinEventHook,
DWORD event,
HWND hwnd,
LONG idObject,
LONG idChild,
DWORD dwEventThread,
DWORD dwmsEventTime)
{
if(event == EVENT_OBJECT_NAMECHANGE && hwnd)
{
.....
}
}
SetWinEventHook(1u, 0x7FFFFFFFu,
ModuleFromAddress(PIURouter),
WinEventProc,
dwProcess, //the window in that process
dwThread, //the window in that thread
WINEVENT_INCONTEXT|WINEVENT_SKIPOWNPROCESS);
我确信DLL已加载到该进程中并调用WinEventProc,只是无法捕获我想要的事件。我确信每半秒发生一次事件。
但是在我使用accevent32.exe并且仅包含该窗口的事件之后。我可以看到EVENT_OBJECT_NAMECHANGE。关闭accevent32.exe并再次运行我的应用程序。现在EVENT_OBJECT_NAMECHANGE被WinEventProc捕获。
我从accevent32.exe反编译了event32.dll。没有看到任何特殊功能。运行accevent32.exe后,Windows属性,样式和过程也不会更改。
有什么建议吗?