Наше приложение требует запуска в «безопасном режиме киоска» в 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);
}