问题标签 [setwindowshookex]

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 回答
753 浏览

c# - 如何知道前台窗口何时更改

我正在用 c# 编写一个应用程序,我需要知道地面窗口何时发生变化我使用了 SetWindowsHookEx,但是在窗口之间切换时我没有收到回调

我的代码:

0 投票
1 回答
916 浏览

c# - c# - Outlook 功能区控件上的键盘钩子

我想挂钩特定控件(组合框)并接收在该控件中键入的所有键。组合框是 Outlook 功能区的一部分,没有按键或其他事件(只是 onChange 行为非常奇怪)。

这是代码:

我拥有的句柄和我得到的 ThreadID 是正确的(通过 Spy++ 验证)但没有捕获任何密钥。使用“0”作为 SetWindowsHookEx 函数的最后一个参数可以正常工作,但它当然是一个全局挂钩。

0 投票
1 回答
195 浏览

c++ - 调用 SetWindowsHookEx() 的应用程序可以捕获自动完成 URL 和密码吗?

我有一个应用程序,它使用 SetWindowsHookEx() 为击键记录设置键盘挂钩。这很好用,但是在 Web 浏览器自动完成 URL 或密码的情况下,应用程序当然不会捕获用户实际没有输入的字符。

我的老板发现一篇文章说:“调用 SetWindowsHookEx() 的应用程序甚至能够捕获自动完成密码。” 我在任何地方都找不到这个记录。实际上是否可以通过钩子获取自动完成文本,如果可以,如何?

0 投票
3 回答
5031 浏览

delphi - SetWindowsHookEx for WH_KEYBOARD (Global) 不使用 Dll?

我试图让我的钩子在一个进程中全局工作,当将hModdwTID设置为 0时,它使用 _LL (LowLevel) 对我有用。

有没有办法让它在没有 .dll 的情况下工作?

0 投票
2 回答
1367 浏览

winapi - SetWindowsHookEx() WM_KEYBOARD_LL 没有通过全屏 RDC

我正在尝试做一个像 Skype 这样的客场计时器风格的东西。如果用户“离开”了一段时间,我会触发一些东西。我一直在将 SetWindowsHookEx() 与 WM_KEYBOARD_LL 一起使用,效果很好。直到您打开 RDC 连接并使其全屏显示。然后我永远不会得到键盘事件。

有人遇到过这个吗?或者知道实现这一目标的更好方法?我实际上已经测试了Skype,并且使用全屏RDC,如果我输入RDC,它将正确地从Away转到Online。

谢谢

编辑:在 Raymond Chen 发表评论后,我做了一些测试,他是对的。不敢相信我经过所有的搜索后从未找到这种方法。它还解决了我遇到的 WPF 应用程序未触发 LL_Mouse/KEYBOARD 事件的问题。

再次感谢。基于此更新我接受的答案。如果您需要做 LL_MOUSE/KWYBOARD,另一个答案仍然很好。

0 投票
0 回答
551 浏览

c++ - 使用 SetWindowsHookEx MS-Windows API 函数的低级键盘挂钩应用程序

我目前正在开发一个挂钩应用程序。我正在使用 C++ 来实现这一点,并且我正在使用 MS-Windows 挂钩库中的函数。我的应用程序通过 .DLL 文件创建了一个全局挂钩,然后我可以向所有进程(到它们的主窗口)发送多个击键。我正在使用 SetWindowsHookEx MS-Windows API 函数,“挂钩类型”是 WH_KEYBOARD_LL。尽管它按预期工作,但在某些情况下(例如某些游戏),即使我发送“假”击键,游戏似乎也无法“理解”该击键。有没有人有类似的问题或建议?非常感谢。

0 投票
1 回答
1317 浏览

c++ - SetWindowsHookEx 注入失败

我正在尝试拦截发送到在另一个进程中运行的窗口的消息,以便我可以对其中的一些做出反应。

注入应用程序是一个 x86 WPF 应用程序,它通过 p/invoke 调用此方法。我将句柄传递给另一个 x86 进程中的窗口。

我知道消息正在发送,因为结果是正确的值。但是 DLL 永远不会被其他进程加载,并且在没有我的钩子拦截它的情况下调用该消息。

0 投票
1 回答
277 浏览

mfc - SetWindowHookEx 在嵌套窗口中阻止 WM_ERASEBKGND

我有以下 MFC 应用程序 UI 结构:

CMFCTabCtrl 可以依次保存 CWnd 派生类等等……

如果你把它想象成一棵窗口树,让我们将上面的定义为深度 0。

当树的深度为 1 时会出现问题,这意味着:

我将以下代码添加到我的应用程序中:

然后我运行应用程序并调整主框架的大小,我注意到以下内容:

  1. 在树深度为 0 的情况下,WM_ERASEBKGND在对话中接收到消息。
  2. 在树深度为 1 的情况下,WM_ERASEBKGND对话中不会收到消息。

我希望我的解释足够清楚。

设置钩子会以如此戏剧性的方式影响行为,这似乎很奇怪。

你们之前有没有遇到过这种问题?

0 投票
0 回答
564 浏览

windows - SetWindowsHookEx 发送多个事件

我将 SetWindowsHookEx 与 C# 一起使用,以允许我缓冲键盘输入(用于文本框)。

现在的基本设置是,每次我创建一个新的文本框时,文本框都会在内部创建一个新的“KeyboardBuffer”对象,然后设置一个键盘挂钩:

(完整的代码可以在这里看到)

问题是,如果我有 N 个文本框,当我输入一个文本框时,我会收到 N 次相同的字符,问题源于 SetWindowsHookEx 不区分 .NET 实例。

我通过制作一个所有文本框都可以访问的静态 KeyboardBuffer 对象暂时解决了这个问题,但这导致了许多其他问题,而且在我看来,这看起来很简单。

有更好的解决方案吗?

提前致谢。

编辑:我对此进行了更多的考虑,并且我意识到我可以在禁用/启用缓冲区时删除/重置挂钩。设置挂钩是否有任何明显的开销?

0 投票
2 回答
1380 浏览

keyboard-hook - 全局键盘挂钩

我需要捕获全局键盘消息,所以我使用 SetWindowsHookEx() 和 WH_KEYBOARD_LL。但它仅在应用程序处于焦点时有效,并且不会全局触发回调。几乎相同的代码适用于 mouse_LL(具有另一个结构等)请帮助!