小编Yua*_* Li的帖子

全局钩子是否可以在x86和x64上运行

我试图将所有内容嵌入到单个COM dll中.目前我将WH_GETMESSAGE和WH_CBT挂钩如下:

BOOL TouchDetector::SetMessageHook(BOOL Install)
{
if (Install)
{
    return ((mHookMessage = ::SetWindowsHookEx(WH_GETMESSAGE, MessageHookProc, mDll, 0)) != NULL)
         && ((mHookWin = ::SetWindowsHookEx(WH_CBT, WinHookProc, mDll, 0)) != NULL);
}
else
{
    return UnhookWindowsHookEx(mHookMessage)
        && UnhookWindowsHookEx(mHookWin);
}
};
Run Code Online (Sandbox Code Playgroud)

我也把这样的共享变量:

#pragma data_seg(".shared")
TouchDetector*   pTouch = nullptr;
HHOOK            mHookMessage = NULL;
HHOOK            mHookWin = NULL;
#pragma data_seg()
#pragma comment(linker,"/section:.shared,rws")
Run Code Online (Sandbox Code Playgroud)

通过附加到explorer.exe我可以看到钩子工作但不是全局的.我也尝试了SetWinEventHook,但结果相同:只对我创建的窗口或explorer.exe做出反应.

它自己的COM dll是x64,因为explorer是x64.这可能是问题吗?

我试图存档的是在前景窗口改变时更新我的​​应用程序的配置.我知道我可以简单地开始另一个线程来关注它.但我不喜欢这样,目前该程序只是被动地响应用户输入或赢得回调.

c++ hook winapi

4
推荐指数
1
解决办法
831
查看次数

标签 统计

c++ ×1

hook ×1

winapi ×1