The*_*gth 5 windows winapi keyboard-hook
我正在Windows上使用低级键盘钩.尽管我目前无法判断该键是否最初被按下或再次按下,但它的工作方式却像魅力一样.该文档(+ 这里)说,这7位持有的过渡状态.但是当钥匙被释放时,这似乎才是真的.当我第一次按下键时,遗憾的是没有设置位7.
有没有办法判断最初是否按下了键?
我最近碰巧遇到了这个问题。我找不到任何好的解决方案,但我最终使用了 flag 和GetAsyncKeyStatebefore SetWindowHookEx。
BOOL wasDown;
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
if (nCode == HC_ACTION) {
LPKBDLLHOOKSTRUCT key = (LPKBDLLHOOKSTRUCT) lParam;
if (key->vkCode == VK_SOMETHING) {
switch (wParam) {
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
if (!wasDown) {
// Processing on first key down
wasDown = true;
}
break;
case WM_KEYUP:
case WM_SYSKEYUP:
// Processing on key up
wasDown = FALSE;
break;
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
wasDown = GetAsyncKeyState(VK_SOMETHING) < 0;
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
Run Code Online (Sandbox Code Playgroud)
当然,这段代码只针对一个键执行此操作。您可以使用标志数组来执行多个键。根据您的应用程序,false如果您希望在设置挂钩后第一次按下,您也可以无条件地将标志设置为 。
| 归档时间: |
|
| 查看次数: |
1546 次 |
| 最近记录: |