C SetWindowsHookEx-取消Winkey+;L(电脑锁)
使用SetWindowsHookEx捕捉键盘事件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(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您好,答案对您有用吗?