SetWindowsHookEx从32位阻止64位WM_HOTKEY

时间:2012-01-13 17:21:54

标签: winapi 32bit-64bit wow64

我们的应用程序需要在Windows上以“安全自助服务终端模式”运行。我们有多种阻止各种行为的方式。我们做的一件事就是使用SetWindowsHookEx监听热键的使用来注册WH_GETMESSAGE挂钩,然后当WM_HOTKEY消息通过时我们将其更改为WM_NULL(参见下面的代码)。这在大多数情况下效果很好但我们最近发现了一个问题。在64位计算机上,如果应用程序正在侦听并响应热键是64位应用程序,则无法使用我们的32位应用程序阻止它。

我们正试图找到解决这个问题的方法,我能想到的唯一选择是生成一个后台64位进程来处理64位应用程序的这个钩子。还有其他(更简单的)替代方案吗?

设置挂钩:

HHOOK getMessageHook = SetWindowsHookEx(WH_GETMESSAGE, GetMessageProc, hInst, 0);

GetMsgProc:

LRESULT CALLBACK GetMessageProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    switch (nCode)
    {
        case HC_ACTION:
        {
            MSG *msg = (MSG *) lParam;
            if (msg->message == WM_HOTKEY)
            {
                // A hotkey was pressed, changed the message to WM_NULL
                msg->message = WM_NULL;
            }
            break;
        }

        default:
            break;
    }
    return CallNextHookEx(NULL, nCode, wParam, lParam);
}

0 个答案:

没有答案