SetWindowsHookEx - отменить Winkey + L (p c блокировка) - PullRequest
0 голосов
/ 19 января 2020

Используйте SetWindowsHookEx для перехвата событий клавиатуры

SetWindowsHookEx(WH_KEYBOARD_LL, HookCallback, NULL, 0)

С помощью этого кода попытайтесь предотвратить блокировку p c

LRESULT __stdcall HookCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode >= 0)
    {
        if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)
        {
            kbdStruct = *((KBDLLHOOKSTRUCT*)lParam);
            // Winkey or l
            if (kbdStruct.vkCode == VK_LWIN || kbdStruct.vkCode == 0x4C)
                return 1;
        }
    }
    return CallNextHookEx(_hook, nCode, wParam, lParam);
}

Похоже, кнопка "l" отменена: она не можно использовать «л» в блокноте, например. Но p c по-прежнему блокируется нажатием Winkey + l.

1 Ответ

0 голосов
/ 21 января 2020

Как сказал @ selb ie, вы не будете перехватывать элементы управления WIN+L в целях безопасности.

Но если вы хотите использовать клавиатуру F12 для отправки WinKey + L, я рекомендую вам использовать Функция LockWorkStation () .

Блокирует отображение рабочей станции. Блокировка рабочей станции защищает ее от несанкционированного использования.

Минимальный код:

if (nCode == HC_ACTION)
    {
        KBDLLHOOKSTRUCT *kbdStruct = (KBDLLHOOKSTRUCT*)lParam;
        if (wParam == WM_KEYDOWN)
        {
            printf("%ld is down\n", kbdStruct->vkCode);
            switch (kbdStruct->vkCode)
            {
            case VK_F12:
                LockWorkStation();
                break;
            }

        }
    }

Кроме того, я заметил, что ваш предыдущий пост касался виртуальной клавиши нестандартной клавиатуры , Если вы не можете обнаружить VK_F12, вы можете использовать @ метод Реми .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...