C SetWindowsHookEx-取消Winkey+;L(电脑锁)

C SetWindowsHookEx-取消Winkey+;L(电脑锁),c,windows,winapi,C,Windows,Winapi,使用SetWindowsHookEx捕捉键盘事件 SetWindowsHookEx(WH_KEYBOARD_LL, HookCallback, NULL, 0) 使用此代码尝试防止电脑锁定 LRESULT __stdcall HookCallback(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode >= 0) { if (wParam == WM_KEYDOWN || wParam == WM_SY

使用SetWindowsHookEx捕捉键盘事件

SetWindowsHookEx(WH_KEYBOARD_LL, HookCallback, NULL, 0)
使用此代码尝试防止电脑锁定

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”按钮已取消:例如,无法在记事本中使用“l”。但pc仍然是按Winkey+l锁定的。

正如@selbie所说,出于安全目的,您不会挂接控件
WIN+l

但若你们想用F12键盘发送WinKey+L,我建议你们改用函数

锁定工作站的显示。锁定工作站可以保护它 防止未经授权的使用

最少的代码:

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,你可以使用。

像CTRL+ALT+DEL一样,我99%确定这是一个操作系统级的钩子,用于控制
WIN+L
,以达到安全目的。有什么解决办法吗?你真正想做的是什么?我有一个蓝牙键盘,上面有F1-F12按钮,用于特定功能,如音量、媒体播放器等。我需要F1-F12有标准的功能。我创建了切换键盘代码的实用程序。除了F12-键盘发送WinKey+L外,一切正常。我无法更改它。@user1167761您好,答案对您有用吗?