我们的应用程序需要在 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);
}