windows – 使用KBDLLHOOKSTRUCT确定第一次按键
发布时间:2020-12-14 02:46:42 所属栏目:Windows 来源:网络整理
导读:我正在 Windows上使用低级键盘钩.尽管我目前无法判断该键是否最初被按下或再次按下,但它的工作方式却像魅力一样. documentation( here)说,第7位保持过渡状态.但是当钥匙被释放时,这似乎才是真的.当我第一次按下键时,遗憾的是没有设置位7. 有没有办法判断最初
我正在
Windows上使用低级键盘钩.尽管我目前无法判断该键是否最初被按下或再次按下,但它的工作方式却像魅力一样.
documentation(
here)说,第7位保持过渡状态.但是当钥匙被释放时,这似乎才是真的.当我第一次按下键时,遗憾的是没有设置位7.
有没有办法判断最初是否按下了键? 解决方法
我最近遇到了这个问题.我找不到任何好的解决方案,但我最终在SetWindowHookEx之前使用了一个标志和一个GetAsyncKeyState.
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); 当然,这段代码只能用于一个键.您可以使用一组标志来执行多个键.根据您的应用程序,如果您希望在设置挂钩后第一次按下,您还可以无条件地将标志设置为false. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Windows本地搭建Edusoho环境
- Windows-删除Windows Server backup卷影副本
- window不卸载切换node
- windows – 如何设计/确保Web服务器的高可用性?
- windows-sbs – SBS 2011:更改内部网站最终用户的显示语言
- Windows&Appium&Java&Python自动化测试-配置开
- windows-phone-7 – Windows Phone 7 WebRequest缓存?
- windows-7 – Windows 7失去了网络连接,但没有别的
- 命令行 – 从命令行修剪文本文件(Windows)
- windows – Ant exec – 无法运行程序’start’CreateProce
推荐文章
站长推荐
- Windows 7 – 您可以在Windows 2012中使用VS 201
- microsoft-graph – Microsoft Graph上的批量限制
- 如何从oauth2.0注销windows azure活动目录身份验
- active-directory – Windows DHCP Server – 当
- active-directory – dsadd给出“提供的名称不是
- 如何给Windows2016新建IIS并建立网站
- buildbot在Windows上作为服务
- 如何使用多个Windows / Dialogs应用MVC
- VUE-Windows系统下搭建vue环境
- batch-file – 一个批处理文件如何获取另一个批处
热点阅读