问题标签 [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.
delphi - Windows 全局键盘挂钩 - Delphi
我使用互联网上的源代码创建了一个 GLOBAL 键盘挂钩 DLL。最好的部分是它工作得很好,除了浏览器。
它会拾取浏览器中的每个键,但似乎当浏览器获得焦点时,它会松开按下的第一个键。在 IE 和 Firefox 中对此进行了测试,两者似乎都相同。
例如,如果我打开 IE 并开始输入 www。,我只回来了ww。如果浏览器窗口保持焦点,则不会丢失更多键。一旦浏览器失去焦点并重新获得焦点,第一个键就会再次丢失。
可能是因为只使用 WH_KEYDOWN 而不是 WH_KEYPRESS / WH_KEYUP ?任何人都可以对此有所了解吗?
谢谢
PS:钩子函数本身如下:向DLL发送一个备忘录框和应用程序句柄,DLL将发送消息以及用户消息。
c++ - 如何在 Windows 7 下拦截 Windows 密钥?
问候,
我已经实现了一个低级键盘钩子,如此处所述。这在 WinXP 下运行良好。问题是,在 Windows 7 下,左右 windows 键不再被拦截。
任何有关如何在 Windows 7 下重新获取这些密钥的建议都非常感谢!
干杯,
罗尼
c - 为什么这个功能失败了?
我试图通过编写一些键盘钩子来理解 Windows 钩子。我有一个功能:
...我试图从这里打电话,但它几乎总是失败。为什么?
c# - C# 全局热键(没有通常使用的全局钩子)
我正在创建一个供我个人使用的程序,该程序必须对某些热键做出反应。例如,当我按下 ctrl+win+z 时,它必须执行某个操作。目前,我可以使用 user32.dll 中的 GetKeyState() 来检测按键,但是我无法阻止它们被传递给活动的应用程序。在 ctrl+win+z 的情况下,我想要发生的操作会发生,但如果我使用资源管理器,例如,资源管理器也会将其读取为“撤消”。
显而易见的解决方案是使用“SetWindowsHookEx()”(也来自 user32.dll),但是每次我尝试涉及它的解决方案时(类似于本网站的示例代码),我第一次使用热键。这是不可接受的。
我希望有人能帮帮忙。如果需要,我可以提供更多信息。
vb6 - 无法在 Windows 7 中使用 VB6 安装 vbAccelerator 键盘挂钩 DLL
我的 VB6 项目在其 MDI 窗体中需要用于工具栏控件的键盘快捷键。为此,我在 vbAccelerator Hooks 中使用了带有 vbalHook6.dll 的 vbAccelerator Keyboard Hook (感谢Alex K的建议),我收到运行时错误“429”,即无法创建 ActiveX 对象。我已经在项目中引用了所需的 DLL,并且还尝试使用注册表服务器实用程序 (regsvr32) 将 dll 注册到 Windows,但它无法注册,错误代码为 0x80004005。我查看了ActiveX 无法创建对象 - vbAccelerator它专门解释了此类错误的原因及其解决方案,但它对我不起作用。键盘挂钩 DLL 提供的项目在我的计算机上运行良好,但在我的项目中运行良好。请帮帮我...... :-| 谢谢..........
[更新]
再次在Alex K的帮助下,我成功注册了所有必需的 DLL....
可是,又出事了……
这是我的方法的代码,IWindowsHook_HookProc
用于获取我想要在我的应用程序中作为快捷方式的组合键。如果按下任何键,下面的代码会导致 VB 与我的应用程序一起崩溃,这有什么问题..?
我还想包括保存 (Ctrl+s) 和打开 (Ctrl+O) 的快捷方式,如何形成链接条件来识别特定的组合键...?
结束功能
c++ - 使用 C++ 的全局键盘钩子
我已经看过很多关于 hooking 的教程和文章,但我不是很理解。主要是因为每个示例都使用不同的解决方案。
我知道我将不得不实施一些能够让钩子保持活力的东西。通常它是某种while循环。Q1:如果这个循环在某个有回调的类中,它会阻止线程执行它们吗?
我知道这需要一段时间,但我非常感谢一些解释良好的全局键盘钩子示例。或者只是将我链接到一些带有二进制文件的工作示例。(相信我,过去几个小时我一直在尝试用谷歌搜索它)。
谢谢
vb6 - 使用 vbAccelarator Win32 Hook 使应用程序与 VB IDE 一起崩溃
我正在开发 VB6 项目,我需要为工具栏控件上的按钮设置键盘快捷键。为此,我使用了来自vbAccelerator的 Win32 Hooks 库。这是我的IWindowsHook_HookProc
函数,我用它来检索击键并根据按下的快捷方式执行操作(Ctrl+N表示新建,Ctrl+O 表示打开,Ctrl+S表示保存),但我不知道导致我的应用程序崩溃的代码有什么问题与 VB6 IDE 一起使用。该功能目前不完整,因为我只是尝试识别Ctrl+N组合键来测试此功能。请帮帮我.... :-|
.net - 键盘钩子改变了按键的行为
我正在创建一个程序,它安装一个键盘钩子来捕获所有键并显示一些与它们相关的文本。
但是,我遇到了一个障碍,那就是安装钩子时一些键会改变行为。
我会看到发布一个小而完整的测试程序,但现在我只描述这个问题。
该问题出现在 .NET 4.0 中的 Windows 7 64 位 C# 程序中。我认为这些都不重要。
我的钩子通过安装自己SetWindowsHookEx
,然后处理系统中处理的所有密钥。
如果钩子方法只是简单地返回,或者对键进行最少的处理(我将在一秒钟内发布改变行为的内容),那么键盘将按程序中的预期运行。
但是,如果我ToAscii
从 User32.dll 调用此函数来确定我的键盘 OemTilde 或类似键上的哪个键,那么任何“覆盖下一个键”的键都会停止运行。我不知道这些键的正确名称,但是两种撇号类型,`` 和 ´ , as well as
~ and
¨`,停止工作。
例如,如果我点击~
then N
,它会显示如下:
- 未安装键盘挂钩:ñ
- 安装了键盘挂钩:n(注意没有〜上面)
有谁知道为什么会发生这种情况以及我该如何解决这个问题?
现在我将满足于在其他程序中正确处理键,即使这意味着我将无法在我自己的程序中正确检测到正确的键序列。
更多信息:
如果我将该ToAscii
函数作为钩子方法的一部分调用,则会出现不同的问题。像这样的键¨
被处理两次,即。如果我点击¨
一次,记事本会收到两个¨¨
字符,N
现在点击只会添加N
.
但是,如果我BeginInvoke
在单独的线程上处理按键,在从键盘钩子方法返回后,就会出现第一个问题。
我的程序可能有点特别:
- 我不使用键盘状态(即我传递的“键状态”256 字节数组只是充满了 0)
- 我不关心死键(从某种意义上说,我的程序不会处理它们,我只关心它们,我不希望我的程序使它们对系统的其余部分无用)
因此,我的代码最终看起来如下:
c#-4.0 - 在 32 位机器上为 .NET 4.0 框架编译时,SetWindowsHookEx 返回 0
我正在尝试设置一个低级别的 Windows 键盘挂钩来抓取三个按下的键,即使应用程序不在焦点上也是如此。为此,我将 SetWindowsHookEx 称为
这曾经在使用 .NET Framework 3.5 的 32 位和 64 位机器上工作,但在升级到 .NET Framework 4.0 后停止在 32 位机器上工作。
有谁知道如何解决这个问题,以便我可以使用 4.0 框架并使其在 32 位和 64 位机器上工作?
.net - .NET 和 Delphi 中的多个键盘挂钩
我有一个包含 .NET 和 Delphi 组件的应用程序,我在两个组件中都注册到键盘挂钩(使用 SetWindowsHookEx)。我首先在 .NET 中注册,然后在 Delphi 中注册。
问题是,Delphi 中的钩子委托在 .NET 中的钩子委托之前被调用。
根据MSDN,挂钩链只是一个列表,据我了解,应根据注册顺序调用代表。
任何人都知道这里发生了什么?提前致谢!