问题标签 [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 投票
4 回答
1615 浏览

c++ - 如何在没有全局挂钩的情况下获得鼠标/键盘活动通知?

我有一个透明窗口(WS_EX_TRANSPARENT)浮动最上面。

只要有鼠标移动(屏幕上的任何地方)或键盘敲击,它就需要显示相关信息(例如鼠标位置)。

是否可以在不使用全局挂钩的情况下捕获鼠标/键盘活动?杀毒软件几乎总是会因使用全局挂钩而触发误报。

任何想法都非常感谢。

0 投票
0 回答
349 浏览

delphi - appcommand_media_play、appcommand_media_stop 等的全局钩子

我正在尝试在我的 delphi 应用程序中捕获 appcommand_media_play、appcommand_media_stop、appcommand_media_nexttrack 等。

目前我使用代码:

但这仅在窗口具有焦点时才有效。

我认为这样做的好方法可能是 windows hook ex。但我不知道如何用它捕获这些特殊键。此外,我从未编写过制作全局钩子所需的库。

有人知道如何做到这一点吗?

我期待你的回复

原谅我的英语

0 投票
1 回答
4140 浏览

c++ - 如何在 Windows 中挂钩复制操作

我知道如何编写和使用 Windows 挂钩 DLL 来捕获窗口上的窗口消息等内容。我需要做的是在任何应用程序中捕获在系统上完成的任何副本(Control+C 或其他方法)。有没有一种使用 windows 挂钩的快速简单的方法来做到这一点?

0 投票
2 回答
443 浏览

java - Ctrl+B 键盘绑定如何工作?

无论我使用什么语言,+ in 和其他快捷键的工作方式都是一样的——这个绑定是如何完成CtrlBWord可以用Java完成吗?

0 投票
5 回答
4742 浏览

c# - 是否可以检测 Windows 何时自动断开低级键盘挂钩?

我正在开发一个使用键盘挂钩的程序。但是,当运行该程序的 PC 只是轻微过载时,它会导致 Windows 断开挂钩与程序的连接,导致它不再响应击键。

有没有办法通过使用不同的架构(可能涉及管道)来防止这种情况,或者甚至更好地提出解决完全相同问题的不同方法?

0 投票
1 回答
1663 浏览

c++ - 低级键盘挂钩:未达到回调

我正在尝试创建一段快速代码来捕获由我的平板电脑上的一个“热键”按钮发送的键序列并重新编程其功能。该按钮在按下时发送一个 LWin+LCtrl+Tab。

搜索了一段时间后,我决定尝试使用 WH_KEYBOARD_LL 钩子,但几个小时后,我仍然无法让钩子工作,更不用说实际功能了。

目前,我有以下内容:

SetWindowsHookEx 返回的句柄绝对不是 NULL,但出于某种原因,无论我尝试按下多少个键,都不会调用 KeyTrap。我还尝试将回调放在 DLL 中并在运行时使用 LoadLibrary,但这也给出了完全相同的结果。

我对所有这些 Win32 编程都是新手,所以这很可能是一个非常愚蠢的错误。

非常感谢!

(PS:代码在 Win7 上运行。目前无法访问实际键盘,但已尝试从屏幕键盘、远程 (RDP) 输入和平板电脑上的硬件热键生成击键。这可能是问题吗? )

0 投票
1 回答
4540 浏览

c# - 使用 SetWindowsHookEx 设置的低级键盘钩子在 C# 中停止调用函数

我正在创建一个监控按键以在全球范围内控制 iTunes 的程序。它还有一些 WinForms(用于显示曲目信息和编辑选项)。

低级键盘钩子在一段时间内效果很好。如果我只是启动程序,就会设置键盘挂钩并打开 iTunes。然后我打开记事本,可以非常快速地输入大量内容,每个笔划都会被捕获,最多 30 毫秒用于钩子函数(大部分时间小于 10 毫秒)。挂钩函数只是将事件添加到由另一个线程处理的队列中。它使用自己的 Application.Run() 在自己的高优先级线程上运行。

但是,如果我开始在 iTunes 中执行操作(例如在我的程序中生成事件的几次播放/暂停点击)或在程序中(例如打开选项窗口),则挂钩函数将停止调用!即使从未使用过键盘也会发生这种情况(例如,在 iTunes 中启动、单击播放和暂停几次,然后按一个键)。

钩子没有被调用的原因并不是因为在钩子函数中花费了太多时间。

当我调用 UnhookWindowsHookEx 时,它总是返回 true,无论钩子函数是否仍在被调用。

那么,可能是什么原因呢?

一个想法(尽管我没有证据或解决方案)是托管线程不再是正确的本机线程。我在我的程序中使用了许多(托管)线程,并且我已经读到单个本机线程可以运行许多托管线程,并且托管线程可以更改哪个本机线程正在运行它。钩子是否可能仍在产生消息但将它们发送到错误的线程?如果是这种情况,我该如何解决?


编辑:钩子和回调

我的 KeyMonitor 的略微剥离的完成版本。为了清楚起见,它被剥离了。我删除了一些实用程序(如 Key 枚举的大部分值和 Keys 类的许多函数,如 ToString() 和 FromString())以及一些错误处理。

大多数重要的东西都在 KeyMonitor 类中。KeyMonitor.Start() 为消息启动一个线程,KeyMonitor.HookThread() 是该线程并为消息循环创建钩子以及 Application.Run(),KeyMonitor.KeyboardHookProc() 是回调函数,而 KeyMonitor。 HookEventDispatchThread() 是调度回调记录的事件。

0 投票
4 回答
3274 浏览

c# - 全球键盘挂钩减慢计算机速度

我正在使用本文中的代码:

稍作修改,但有时当我按几个键太快时,计算机会“减慢”一点并变得有点“滞后”。

因此,当它异步触发事件 HookCallback 时,它有时会有点滞后,但我猜是这种方法“HookCallback”中的代码使其滞后还是它自己挂钩?我有一个想法,每次输入“HookCallback”时都创建一个新线程,这可能会有所帮助,但我是否想在每次按下键时启动一个新线程?我已经收到了一个异步调用,所以我不知道是否应该启动另一个线程。

所以我的问题很简单,它在哪里以及为什么会减慢计算机的速度,是自行挂钩还是自定义代码?或者我应该将自定义代码放在不同的线程中?

我还有另一个问题,有时在几次按键后“HookCallback”没有被调用,好像我已经“解开”了事件,它根本不会捕获任何击键。除非我手动执行,否则我如何确保它永远不会取消事件?

谢谢你。

0 投票
0 回答
1542 浏览

c# - 一段时间后全局键盘挂钩没有响应

我正在使用下面的代码,但几乎没有修改:

有时在几次按键之后“hookProc”不会被调用,就好像我已经“解开”事件一样,它根本不会捕获任何击键。除非我手动执行,否则我如何确保它永远不会取消事件?我如何确保我继续订阅钩子?

谢谢你。

0 投票
1 回答
355 浏览

python - 宏记录器中的 Alt 键问题

我正在编写一个宏记录器(基于 PyHook),如果 #1 包含 Alt 键,则在它钩住组合键 #1 后无法使其按下组合键 #2。除了取消按下修饰键,我还应该做什么?(alt,ctrl,shift)?下面是两个主要功能。