问题标签 [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.
c# - .NET 应用程序中未调用低级键盘挂钩
我正在用 C# 编写一个键盘记录器,但是在从键盘事件中调用我的钩子方法时遇到了一些麻烦。我的代码看起来是正确的,但由于某种原因回调没有发生。
以下是相关代码:
该SetWindowsHookEx
调用应返回一个句柄(即不是空值),因此它应该意味着它已安装,但是当我在 中放置断点时HookCallback
,它永远不会到达。
谁能告诉我我可能做错了什么?
.net - 我可以同时使用全局挂钩和原始输入吗?
我尝试使用 Global HooksSetWindowsHookEx
来获取所有击键。
问题是我不能同时使用全局挂钩和原始输入。
我认为这里一定有一些问题,因为在我启用原始输入后全局挂钩会自动被禁用。
c++ - SetWindowsHookEx 使用谷歌浏览器失败。错误代码 87 参数无效
我正在制作一个基于教程的程序,并希望能够将我的代码挂接到某些应用程序中,以使教程与应用程序交互。
我的钩子代码适用于除谷歌浏览器之外的大多数应用程序。我已将我的代码精简为以下内容,因此您可以看到它出错了。
主文件
测试 Dll (mydll.dll)
定义文件
一切正常(包括获取 processId 和加载库和 getprocaddress)直到 SetWindowsHookEx 返回 NULL,错误代码为 87(无效参数)。
两者chrome.exe
和我的代码都是 32 位的。
这对其他人有用还是有人知道它不起作用?
谢谢
winapi - 如何将 DLL 注入 Adobe Reader X
我需要将一个 DLL 注入到 Adobe Reader X 中,该 DLL 读取发送到滚动条的事件(即使它是隐藏的)。我需要这样做才能找出我在文档的哪一页。
我尝试使用 win32 钩子 API 钩子一个 dll,我给桌面上的所有进程一个 CBT 钩子并监听 Adobe Reader X 窗口的创建,然后用我的滚动条钩子钩子这个窗口。
问题是我从来没有在 Adobe Reader X 上放置滚动条挂钩,在创建这些窗口时我没有收到这些窗口的创建窗口或窗口激活消息。我如何获取这些消息以及如何连接到 Adobe Reader X?
如果您需要,这是标题
delphi - 创建文件挂钩
我正在尝试为 CreateFile 创建一个 Hook,所以当一个进程尝试创建一个文件时,我们创建的 hookdll 将通知用户:“这个进程 xx.exe 试图创建 xx.exe,你要继续吗?”
到目前为止我在这里,所以我需要在这段代码中修改:
winapi - 申请及活动时间
我正在尝试实现一个 CBT Hook 来做一件简单的事情:找出哪个应用程序处于活动状态多长时间?活动意味着“用户正在与应用程序窗口进行交互”。
例如,用户在 MSWORD 中处理提案或用户在 Youtube 上在线冲浪。
我们需要了解以下内容:
- 应用程序的名称。
- 文档或 URL 的名称(如果是 IE / Chrome / FF 等浏览器)。
- 应用程序窗口的活动时间。
我的方法是:
SetWindowsHookEx()
为了WH_CBT
- 在我的回调函数
CBTProcCallBack()
中,我检查代码HCBT_ACTIVATE
。我得到了窗口、应用程序和 exe 的详细信息 - 记录时间。
但是,并非所有活动窗口都被捕获。
我的方法好吗还是我错了?
c# - 是否可以检测 Windows 何时自动断开低级键盘挂钩?
我正在开发一个使用键盘挂钩的程序。但是,当运行该程序的 PC 只是轻微过载时,它会导致 Windows 断开挂钩与程序的连接,导致它不再响应击键。
有没有办法通过使用不同的架构(可能涉及管道)来防止这种情况,或者甚至更好地提出解决完全相同问题的不同方法?
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() 是调度回调记录的事件。
c# - SetWindowsHookEx 不适用于线程 ID
您好,提前感谢任何愿意提供帮助的人。我正在尝试设置一个 CBT windows 挂钩,当我在全局设置它时效果很好,但每当我尝试将它附加到单个线程时都会失败。据我所知,我按书行事: - 我从非托管 dll 中暴露了钩子过程 - 我的应用程序、dll 和线程的进程都是 32 位的 - 我使用的线程 ID 是正确的(用 spy++ 确认)
当我试图只从 C++ 代码中挂钩一个线程时,我设法做到了……你可以只从非托管代码中挂钩一个线程吗?
无论如何,这是我的代码:
c# - C# 低级鼠标钩子和表单事件处理
我正在使用由 VS 2010 生成的简单表单,其中包含 2 个按钮,开始和停止。开始使用 SetWindowsHookEx 触发 WH_MOUSE_LL,停止停止钩子。钩子工作正常,我用双击“替换”鼠标中键点击,我唯一的问题是点击表单的最小化/最大化/关闭按钮,似乎有某种“事件竞赛”之间上面提到的按钮调用的钩子和事件。它反映了这样一个事实,即当您按下其中一个按钮时,它会在完成其操作之前一直“按下”一段时间(例如,表单最小化)。当我右键单击表单并选择其中一项操作时,当我停止挂钩并按下上述按钮之一时,它会立即做出同样的反应。有没有人遇到过这样的行为?