Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Can';t使用SetWinEventHook捕获事件。将在使用accevent32.exe后获取事件_C++_Windows_Winapi_Events - Fatal编程技术网

C++ Can';t使用SetWinEventHook捕获事件。将在使用accevent32.exe后获取事件

C++ Can';t使用SetWinEventHook捕获事件。将在使用accevent32.exe后获取事件,c++,windows,winapi,events,C++,Windows,Winapi,Events,有人有以下问题吗? 我编写一个dll加载到另一个进程中,以获取该进程中某个窗口的事件\对象\值更改事件。代码如下所示 void CALLBACK WinEventProc( HWINEVENTHOOK hWinEventHook, DWORD event, HWND hwnd, LONG idObject, LONG idChild, DWORD dwE

有人有以下问题吗? 我编写一个dll加载到另一个进程中,以获取该进程中某个窗口的事件\对象\值更改事件。代码如下所示

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并仅包含该窗口的事件之后。我可以看到事件\u对象\u名称更改。关闭accevent32.exe并再次运行我的应用程序。现在WinEventProc捕获了事件\u对象\u名称更改

我从accevent32.exe反编译event32.dll。没有看到调用任何特殊函数。此外,运行accevent32.exe后,不会更改windows属性、样式和过程


有什么建议吗?

在插入DLL时使用WINEVENT\u SKIPOWNPROCESS是。。。古怪的请注意,SetWinEventHook()不需要DLL注入。Event.dll确实使用了一个特殊函数ChangeWindowMessageFilterEx()。使用WINEVENT\u SKIPOWNPROCESS来确保事件挂钩对于安装挂钩的进程不起作用,通常是我的应用程序。DLL注入是我将代码运行到目标应用程序的目的。我搜索了函数ChangeWindowMessageFilterEx,它似乎控制windows消息而不是事件。不过我会尝试一下。好吧,这是奇怪的部分。“自己的进程”现在是您注入DLL的进程。这不是您用来启动注入的进程。从msdn来看,我认为WINEVENT_SKIPOWNPROCESS与WINEVENT_SKIPOWNTHREAD相同,它阻止钩子的这个实例接收注册这个钩子的线程生成的事件。那页的例子似乎也证明了这一点。