问题标签 [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 回答
9910 浏览

delphi - Windows 全局键盘挂钩 - Delphi

我使用互联网上的源代码创建了一个 GLOBAL 键盘挂钩 DLL。最好的部分是它工作得很好,除了浏览器。

它会拾取浏览器中的每个键,但似乎当浏览器获得焦点时,它会松开按下的第一个键。在 IE 和 Firefox 中对此进行了测试,两者似乎都相同。

例如,如果我打开 IE 并开始输入 www。,我只回来了ww。如果浏览器窗口保持焦点,则不会丢失更多键。一旦浏览器失去焦点并重新获得焦点,第一个键就会再次丢失。

可能是因为只使用 WH_KEYDOWN 而不是 WH_KEYPRESS / WH_KEYUP ?任何人都可以对此有所了解吗?

谢谢

PS:钩子函数本身如下:向DLL发送一个备忘录框和应用程序句柄,DLL将发送消息以及用户消息。

0 投票
2 回答
3035 浏览

c++ - 如何在 Windows 7 下拦截 Windows 密钥?

问候,

我已经实现了一个低级键盘钩子,如此所述。这在 WinXP 下运行良好。问题是,在 Windows 7 下,左右 windows 键不再被拦截。

任何有关如何在 Windows 7 下重新获取这些密钥的建议都非常感谢!

干杯,

罗尼

0 投票
1 回答
87 浏览

c - 为什么这个功能失败了?

我试图通过编写一些键盘钩子来理解 Windows 钩子。我有一个功能:

...我试图从这里打电话,但它几乎总是失败。为什么?

0 投票
1 回答
801 浏览

c# - C# 全局热键(没有通常使用的全局钩子)

我正在创建一个供我个人使用的程序,该程序必须对某些热键做出反应。例如,当我按下 ctrl+win+z 时,它必须执行某个操作。目前,我可以使用 user32.dll 中的 GetKeyState() 来检测按键,但是我无法阻止它们被传递给活动的应用程序。在 ctrl+win+z 的情况下,我想要发生的操作会发生,但如果我使用资源管理器,例如,资源管理器也会将其读取为“撤消”。

显而易见的解决方案是使用“SetWindowsHookEx()”(也来自 user32.dll),但是每次我尝试涉及它的解决方案时(类似于本网站的示例代码),我第一次使用热键。这是不可接受的。

我希望有人能帮帮忙。如果需要,我可以提供更多信息。

0 投票
1 回答
947 浏览

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) 的快捷方式,如何形成链接条件来识别特定的组合键...?

结束功能

0 投票
3 回答
5673 浏览

c++ - 使用 C++ 的全局键盘钩子

我已经看过很多关于 hooking 的教程和文章,但我不是很理解。主要是因为每个示例都使用不同的解决方案。

我知道我将不得不实施一些能够让钩子保持活力的东西。通常它是某种while循环。Q1:如果这个循环在某个有回调的类中,它会阻止线程执行它们吗?

我知道这需要一段时间,但我非常感谢一些解释良好的全局键盘钩子示例。或者只是将我链接到一些带有二进制文件的工作示例。(相信我,过去几个小时我一直在尝试用谷歌搜索它)。

谢谢

0 投票
3 回答
573 浏览

vb6 - 使用 vbAccelarator Win32 Hook 使应用程序与 VB IDE 一起崩溃

我正在开发 VB6 项目,我需要为工具栏控件上的按钮设置键盘快捷键。为此,我使用了来自vbAccelerator的 Win32 Hooks 库。这是我的IWindowsHook_HookProc函数,我用它来检索击键并根据按下的快捷方式执行操作(Ctrl+N表示新建,Ctrl+O 表示打开,Ctrl+S表示保存),但我不知道导致我的应用程序崩溃的代码有什么问题与 VB6 IDE 一起使用。该功能目前不完整,因为我只是尝试识别Ctrl+N组合键来测试此功能。请帮帮我.... :-|

0 投票
4 回答
2670 浏览

.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)
  • 我不关心死键(从某种意义上说,我的程序不会处理它们,我只关心它们,我不希望我的程序使它们对系统的其余部分无用)

因此,我的代码最终看起来如下:

0 投票
4 回答
9696 浏览

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 位机器上工作?

0 投票
2 回答
514 浏览

.net - .NET 和 Delphi 中的多个键盘挂钩

我有一个包含 .NET 和 Delphi 组件的应用程序,我在两个组件中都注册到键盘挂钩(使用 SetWindowsHookEx)。我首先在 .NET 中注册,然后在 Delphi 中注册。

问题是,Delphi 中的钩子委托在 .NET 中的钩子委托之前被调用。

根据MSDN,挂钩链只是一个列表,据我了解,应根据注册顺序调用代表。

任何人都知道这里发生了什么?提前致谢!