SetWindowsHookEx для блокировки 64-битного WM_HOTKEY из 32-битного - PullRequest
1 голос
/ 13 января 2012

Наше приложение требует запуска в «безопасном режиме киоска» в 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...