首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Win32 C++低水平键盘钩引起奇怪行为

Win32 C++低水平键盘钩引起奇怪行为
EN

Stack Overflow用户
提问于 2013-09-10 19:10:42
回答 1查看 1K关注 0票数 1

我在使用键盘钩子时遇到了问题。我要做的(并且做的)是从任何窗口/焦点,我可以点击一个键,运行一个函数(移动鼠标和点击)。

从正面看,它运行得很好,但当我开始做其他事情时,一切都很奇怪(即使是在结束问题之后)。

在firefox上,它将有一个“选择并高亮显示所有鼠标的位置,当我点击鼠标”;如果我尝试键入,所有数字字符显示出来,就好像shift按钮已经关闭,没有办法绕过它。如果我单击任务栏(wxDev C++)上的编译器,它将自动启动程序的一个新实例。

这只是问题的开始,我已经重新启动我的电脑,以获得正常的行为。

我想我可能用错了:

在int WinMain中:

keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hThisInstance, 0);

在主要程序中:

代码语言:javascript
运行
复制
case WM_KEY_WPARAM_VK: 
keyid = wParam; // 65 == 'a'
letterid = keyid - 65;
if ('a'+letterid == 'q') {  DoFunction(); }
return 0;

所以当我点击键盘上的Q键时,这个函数就会被调用。

这是程序,我试图不锁定键盘输入(所以我增加了额外的行)。我搞不懂这个..。

代码语言:javascript
运行
复制
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam ) {
  KBDLLHOOKSTRUCT *pKeyBoard = (KBDLLHOOKSTRUCT *)lParam;
  // When a key is pressed
  if (WM_KEYDOWN == wParam) {
    PostMessage(hWnd, WM_KEY_WPARAM_VK, pKeyBoard->vkCode, 0);
    CallNextHookEx(keyboardHook, pKeyBoard->vkCode, 0, 0);
  }
}

感谢您的阅读。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-10 19:18:08

您需要将CallNextHookEx函数放在if语句之外!(并更新它以正确地将wParamlParam传递到下一个钩子)

代码语言:javascript
运行
复制
return CallNextHookEx(keyboardHook, pKeyBoard->vkCode, wParam, lParam);

按照您当前的方式,您的代码将阻止操作系统其他部分的所有“键”笔画,因此出现了奇怪的行为。

无论您在钩子中做什么,调用CallNextHookEx都是绝对必要的。我还将避免在钩子中执行任何冗长的(阻塞)操作。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18727014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档