问题标签 [keyboard-hook]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1369 浏览

dll - 32 位键盘挂钩在 64 位应用程序中意外工作,但挂起 Outlook

已经阅读了很多关于这个的内容,图片变得更加模糊。我有一个 32 位应用程序,它安装了一个 KeyboardHook 来等待全局热键并唤醒。在 Win 7 x64 版本上运行它我注意到按下热键时它会挂起 Outlook x64 版本。

所以我做了一些研究,看起来 32 位键盘钩子甚至不应该在 64 位应用程序中工作。是时候进行更多测试了...

它们的热键在 64 位记事本、写字板和便笺中运行良好。我验证了这些是 64 位应用程序,因为它们在任务管理器中旁边没有“*32”。不会挂起应用程序,它会做它应该做的事情。但是等等……一个 32 位的钩子 dll 不能被加载到一个 64 位的应用程序中,对吧?

查看 Process Explorer 显示挂钩 dll 甚至没有加载到记事本进程中!(如果我从 WOW64 目录运行 32 位 notepad.exe,我可以看到加载到进程中的 dll,所以我知道我使用的工具是正确的)。

因此,Outlook 挂起问题可能相关也可能不相关,但为什么该钩子甚至在 64 位记事本中都可以工作?

0 投票
2 回答
4336 浏览

.net - 我可以同时使用全局挂钩和原始输入吗?

我尝试使用 Global HooksSetWindowsHookEx来获取所有击键。

问题是我不能同时使用全局挂钩和原始输入。

我认为这里一定有一些问题,因为在我启用原始输入后全局挂钩会自动被禁用。

0 投票
2 回答
2291 浏览

c# - 计时器上的低级键盘挂钩

我有一个键盘钩子,可以截取按键并输出一个随机字母。我想要做的是设置一个计时器,让键盘在一分钟后脱钩,然后在另一分钟自行钩住。所以第一部分工作,它在开始时挂上,一分钟后它解开,但再也没有挂上。脱钩后如何让它重新上钩?

这是钩子代码:

这是应用程序的入口点:

编辑:所以我接受了 Jonathan.Peppers 的建议,并在 keydown 事件中检查了 isActive ,这就像它打开和关闭一样假装。现在我遇到了一个新问题。在我输入了一段时间后,我得到了一个 InvalidOperationException,原因是“Queue Empty”,并且不确定为什么它在我输入时运行良好时会被清空。我单独留下了键盘挂钩代码,但将应用程序入口点代码更新为以下内容:

编辑:输入一段时间后,我从上面的代码中得到堆栈跟踪。

在 System.Collections.Queue.Dequeue() 在 System.Windows.Forms.SendKeys.SendInput(Byte[] oldKeyboardState, Queue previousEvents) 在 System.Windows.Forms.SendKeys.Send(String keys, Control control, Boolean wait) at System.Windows.Forms.SendKeys.Send(String keys) at KeyRemapWindowsForm.Program.gkh_KeyDown(Object sender, KeyEventArgs e) 在 C:\Demos\KeyRemapWindowsForm\Program.cs:line 79

0 投票
0 回答
1539 浏览

c# - 键盘挂钩没有抓住每个键

我在使用全局键盘挂钩时遇到问题。

在大多数情况下,它有效。但是,在下面的部分中,它应该阻止 enter 键被传递到焦点程序。它只工作了大约一半的时间。

关于为什么它有时会阻止输入键而不是其他键的任何想法?

以下是相关代码:

和:

和:

0 投票
3 回答
7137 浏览

objective-c - 修改 NSEvent 以发送与按下的键不同的键

我正在尝试为辅助技术目的创建一个 OS X 键盘挂钩(即不要担心,不是键盘记录器)。

当用户按下一个键时,我想阻止真正的按键并发送一个假按键(我选择的字符)。

我有以下代码:

任何帮助实现这些目标?基本上修改 NSEvent "keyboardEvent" 以发送不同的字符。谢谢。

0 投票
1 回答
870 浏览

objective-c - 如何区分用户点击的键盘事件和生成的键盘事件?

我已经安装了一个键盘挂钩:

CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {

基本上我想获取用户的键盘点击,吃掉输入,然后发布我自己的输入。

因此,如果他点击“g”,我可能想将“foo”发布到文本字段。

我正在用这里找到的文本字段写信CGEventPost: http CGEventSetUnicodeString: //www.mail-archive.com/cocoa-dev@lists.apple.com/msg23343.html

问题是我以编程方式输入的每个字符都在敲击键盘钩子。所以我不能return NULL在键盘钩子中阻止用户输入......这也阻止了所有程序的输入!

我在 C# 的 Windows 端使用“注入”标志对它们进行了区分,请参阅一年前的问题:如何使用低级 8 位标志作为条件?

在 Objective-C 中寻找类似的东西。

0 投票
1 回答
576 浏览

.net - keybd_event、特殊字符和键盘布局?

我正在开发一个 C# .net 应用程序,它允许用户插入文本并让应用程序自动键入它。它所做的是解析此文本的每个字符并单独发送每个击键。

但是,我想知道是否有办法真正知道输出是什么。例如,

但是,我有点担心特殊字符和键盘布局。

作为参考,我发现这个页面带有关键代码:http: //msdn.microsoft.com/en-us/library/ms927178.aspx

此页面有以下几行:

现在,如果我的文本包含一个“\”,我怎么知道我是否必须发送 VK_OEM_5 或 VK_OEM_102?

谢谢!

0 投票
3 回答
1178 浏览

c# - 在 Windows Mobile 6.1/6.5 上使用全局热键切换应用程序

我正在编写一个跨越 Windows Mobile 6.1/6.5 上 C# 和 C/++ 之间界限的应用程序。我们目前在我们的设备上运行了一个自助服务终端应用程序,并且希望添加来回切换到第二个自助服务终端应用程序的能力。

我们的目标是建立一个全局热键,在按下时切换进程窗口(类似于 alt+tab 的工作方式)。我们已经拥有这两个应用程序,并且我已经编写了一些切换流程的代码,但是我很难让项目的全局热键部分正常工作。

从我所做的所有阅读中,我的理解是监视全局按键的最佳方法是使用coredll.dll 中的 SetWindowsHookEx 函数链接到系统消息泵。不幸的是,我还读到该功能在平台上不受技术支持。

我还发现一些教程建议在 MFC 框架中使用带有 ON_WM_KEYUP/ON_WM_KEYDOWN 宏的消息映射,但找不到任何特定于 Windows Mobile 的文档。当我尝试使用此处的文档时,我的设备不断崩溃。

在平台上设置某种全局密钥挂钩是否有公认的最佳实践?如果没有,是否有至少在技术上得到支持的东西?

提前致谢。

回复报价

0 投票
1 回答
115 浏览

c++ - 使用 DLL 创建全局钩子时我应该在 DLL 中放入什么?

我正在创建一个全局挂钩,但问题是它需要一个 DLL,但我对 DLL 一无所知。那么我应该在 dll 文件中包含什么?

0 投票
1 回答
1058 浏览

jquery - 如何用 jQuery 替换击键?

我需要能够用 jQuery 替换击键。当按下右箭头时,我希望按下 tab 键。到目前为止,我有:

39 是右箭头,9 是标签按钮。此外,模拟 keydown 递归调用事件处理程序,这显然很糟糕,但即使没有该行,这仍然不起作用。

我正在使用位于 (http://code.google.com/p/jqueryjs/source/browse/trunk/plugins/simulate/jquery.simulate.js?r=6063) 的 jquery.simulate.js,因为我不能找不到仅使用 jQuery 模拟按键的方法。

按键只是不模拟实际的按键。