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

c# - .NET 应用程序中未调用低级键盘挂钩

我正在用 C# 编写一个键盘记录器,但是在从键盘事件中调用我的钩子方法时遇到了一些麻烦。我的代码看起来是正确的,但由于某种原因回调没有发生。

以下是相关代码:

SetWindowsHookEx调用应返回一个句柄(即不是空值),因此它应该意味着它已安装,但是当我在 中放置断点时HookCallback,它永远不会到达。

谁能告诉我我可能做错了什么?

0 投票
2 回答
4336 浏览

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

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

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

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

0 投票
2 回答
2102 浏览

c++ - SetWindowsHookEx 使用谷歌浏览器失败。错误代码 87 参数无效

我正在制作一个基于教程的程序,并希望能够将我的代码挂接到某些应用程序中,以使教程与应用程序交互。

我的钩子代码适用于除谷歌浏览器之外的大多数应用程序。我已将我的代码精简为以下内容,因此您可以看到它出错了。

主文件

测试 Dll (mydll.dll)

定义文件

一切正常(包括获取 processId 和加载库和 getprocaddress)直到 SetWindowsHookEx 返回 NULL,错误代码为 87(无效参数)。

两者chrome.exe和我的代码都是 32 位的。

这对其他人有用还是有人知道它不起作用?

谢谢

0 投票
1 回答
1382 浏览

winapi - 如何将 DLL 注入 Adob​​e Reader X

我需要将一个 DLL 注入到 Adob​​e Reader X 中,该 DLL 读取发送到滚动条的事件(即使它是隐藏的)。我需要这样做才能找出我在文档的哪一页。

我尝试使用 win32 钩子 API 钩子一个 dll,我给桌面上的所有进程一个 CBT 钩子并监听 Adob​​e Reader X 窗口的创建,然后用我的滚动条钩子钩子这个窗口。

问题是我从来没有在 Adob​​e Reader X 上放置滚动条挂钩,在创建这些窗口时我没有收到这些窗口的创建窗口或窗口激活消息。我如何获取这些消息以及如何连接到 Adob​​e Reader X?

如果您需要,这是标题

0 投票
1 回答
3218 浏览

delphi - 创建文件挂钩

我正在尝试为 CreateFile 创建一个 Hook,所以当一个进程尝试创建一个文件时,我们创建的 hookdll 将通知用户:“这个进程 xx.exe 试图创建 xx.exe,你要继续吗?”

到目前为止我在这里,所以我需要在这段代码中修改:

0 投票
1 回答
169 浏览

winapi - 申请及活动时间

我正在尝试实现一个 CBT Hook 来做一件简单的事情:找出哪个应用程序处于活动状态多长时间?活动意味着“用户正在与应用程序窗口进行交互”。

例如,用户在 MSWORD 中处理提案或用户在 Youtube 上在线冲浪。

我们需要了解以下内容:

  1. 应用程序的名称。
  2. 文档或 URL 的名称(如果是 IE / Chrome / FF 等浏览器)。
  3. 应用程序窗口的活动时间。

我的方法是:

  1. SetWindowsHookEx()为了WH_CBT
  2. 在我的回调函数CBTProcCallBack()中,我检查代码HCBT_ACTIVATE。我得到了窗口、应用程序和 exe 的详细信息
  3. 记录时间。

但是,并非所有活动窗口都被捕获。

我的方法好吗还是我错了?

0 投票
5 回答
4742 浏览

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

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

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

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 投票
1 回答
2880 浏览

c# - SetWindowsHookEx 不适用于线程 ID

您好,提前感谢任何愿意提供帮助的人。我正在尝试设置一个 CBT windows 挂钩,当我在全局设置它时效果很好,但每当我尝试将它附加到单个线程时都会失败。据我所知,我按书行事: - 我从非托管 dll 中暴露了钩子过程 - 我的应用程序、dll 和线程的进程都是 32 位的 - 我使用的线程 ID 是正确的(用 spy++ 确认)

当我试图只从 C++ 代码中挂钩一个线程时,我设法做到了……你可以只从非托管代码中挂钩一个线程吗?

无论如何,这是我的代码:

0 投票
1 回答
2039 浏览

c# - C# 低级鼠标钩子和表单事件处理

我正在使用由 VS 2010 生成的简单表单,其中包含 2 个按钮,开始和停止。开始使用 SetWindowsHookEx 触发 WH_MOUSE_LL,停止停止钩子。钩子工作正常,我用双击“替换”鼠标中键点击,我唯一的问题是点击表单的最小化/最大化/关闭按钮,似乎有某种“事件竞赛”之间上面提到的按钮调用的钩子和事件。它反映了这样一个事实,即当您按下其中一个按钮时,它会在完成其操作之前一直“按下”一段时间(例如,表单最小化)。当我右键单击表单并选择其中一项操作时,当我停止挂钩并按下上述按钮之一时,它会立即做出同样的反应。有没有人遇到过这样的行为?