无法使用SetWinEventHook捕获事件。使用accevent32.exe后会得到事件

时间:2015-03-07 02:31:46

标签: c++ windows winapi events

有没有人遇到以下问题? 我写了一个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属性,样式和过程也不会更改。

有什么建议吗?

0 个答案:

没有答案