SetWindowsHookEx 全局键盘挂钩未捕获所有按键

2023-12-09

我正在编写属于自动化系统一部分的代码。我想添加一个键盘钩子来提前结束测试,我通过使用 SetWindowHookEx 来做到这一点。

我的代码看起来很像这样:http://support.microsoft.com/kb/318804

这是我的 SetWindowsHookEx 调用:

hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProcedure, GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);

现在,当我运行自动化时,自动化系统内的按键(来自 SendKeys)会触发键盘挂钩方法,但是当我手动敲击键盘时,它不会被触发。

如果有帮助的话,我可以分享更多代码,但它是一个更大系统的一部分。我很确定:

  1. 我的 SetWindowsHookEx 不正确,或者
  2. 自动化系统中的某些东西正在绕过我的键盘挂钩(但我真的不知道如何辨别)。

我编写了一个测试应用程序,它使用来自 microsoft.com 的示例代码来确定我的方法是否有价值(即它有效),但我在将其与自动化系统集成时遇到了麻烦。

任何有关如何确定问题所在的想法将不胜感激。

编辑:自动化线束中没有 SetWindowsHookEx 的其他实例。我不太清楚全局键盘挂钩的细微差别。线程和桌面。如果我添加一个全局键盘钩子,添加它的位置是否重要?


乔治·马马拉泽的文章在 C# 中处理全局鼠标和键盘挂钩如果应用程序在 CodeProject 上“在后台”,则该方法自 2004 年以来一直存在,经过多次修订,他仍然支持它并更新它:据我了解,他启动了他的项目,因为他无法在.NET,当应用程序在后台运行时,它可以工作,但后来发现您可以挂钩某些“较低级别”事件:以前的 Q318804 :现在 MSDN 文章修订了(?),说你可以挂钩 WH_KEYBOARD_LL.

或许,由于 George 的代码多年来经过了众多 C# 程序员的现场测试,并针对错误或问题进行了广泛的修改:他的代码对您来说可能有一些价值吗?在他的文章第 1 版“常见问题解答”中,他展示了使挂钩应用程序特定化而不是全局化的代码。

上面引用的 MSDN 文章提到......在允许挂钩低级事件的背景下,正如您所做的那样:

“低级挂钩过程被称为 在安装钩子的线程上。 低级钩子不需要 钩子程序可以在a中实现 DLL。”

假设:线程可能与您所观察到的现象有关吗?

我假设您已经完成并考虑了以下所有细节:MSDN:LowLevelKeyboardProc 函数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SetWindowsHookEx 全局键盘挂钩未捕获所有按键 的相关文章

  • C++ 中的“int”默认是“signed long int”吗?

    Is int默认情况下signed long int in C 它是否依赖于平台和 或编译器 如果是这样 怎么办 EDIT 以下任何一项是否保证是重复的 signed short int signed int signed long int
  • C# - Visual Studio 中的 System.OutOfMemoryException

    我遇到问题 当我右键单击 Visual Studio 中的主窗体并转到 视图设计器 时 出现错误 它说 引发了 System OutOfMemoryException 类型的异常 堆栈跟踪 at System Reflection Asse
  • 使用 GCHandle 将大型结构数组从 C# unity 脚本传递到 C++ dll 在 C++ 函数执行后崩溃

    我想从 C unity 脚本将结构数组传递给 c 本机插件 我做了如下操作 我可以访问数据 但我的应用程序在执行 c 函数后崩溃 我不知道为什么 C side StructLayout LayoutKind Sequential publi
  • 当 foreach 块的内容具有 Conditional 属性时,C# 编译器是否会对其进行优化?

    我正在工作中编写一些调试代码 我想知道我所做的是否会损害性能 让我们看一下代码 foreach var item in aCollection Debug WriteLine item Name 我知道 Debug 类使用 Conditio
  • 如何检查号码是否只有唯一的数字?

    例如 2345 是唯一的数字 因为没有数字显示两次 但 3324 不是唯一的数字 因为 3 出现了两次 我尝试使用 但我 代码 显示但我没有得到数字我得到了数字 编辑 你不能使用字符串 number 10 number 100 number
  • 静态 OpenCV 库中未定义的引用

    我有一个使用 OpenCV 3 1 的 C 项目 并且使用共享库可以正常工作 但现在我想使用静态库 位于项目目录中的文件夹中 来编译它 因为我希望能够在未安装 OpenCV 的情况下导出它 如果需要还可以编辑和重新编译 这次我重新编译了 O
  • 如何在 ASP.NET Core 6.0 Web API 项目中启用 cors?

    在我的 ASP NET Core 6 0 Web API 项目中配置了 CORS 但预检请求收到 http 405 错误 换句话说 不允许使用 HTTP OPTION 看起来 cors 没有启用 我见过的例子config EnableCor
  • C语言中没有循环可以打印数组吗?

    例如 在Python中 如果我们将一个列表作为数组 它会直接用一行代码打印整个数组 有什么办法可以用C语言实现同样的事情吗 简短回答 No 对表格上几乎所有问题的简短回答 用 C 语言做 X 工作能像用 Python 一样简单吗 No 长答
  • C# 实体框架我们应该使用 POCO.Id 还是仅使用 POCO 设置关系?

    我在服务方法中遇到一种情况 将 POCO 分配为另一个 POCO 的子对象无法按预期工作 我正在使用实体框架 4 public void ChangeOrderCurrency Currency currency order Currenc
  • AcceptSocket 超时?

    是否有可能AcceptSocket on a TcpListener具有超时的对象 以便它偶尔被中断 TcpListener server new TcpListener localIP port server Start while sh
  • 打开位置设置页面或提示用户启用位置

    我一直在绞尽脑汁 徒劳地谷歌搜索 我正在尝试找到一种方法来提示用户通过直接进入设置页面或仅点击屏幕上的 是 来切换位置 我见过的所有代码似乎都不起作用 有人有有效的方法吗 一个详细的例子将不胜感激 谢谢 我对 Xamarin 开发非常陌生
  • += 运算符在 C++ 中是如何实现的?

    这是我一直在思考的一个问题 但从未找到任何资源来说明这个问题的答案 事实上它不仅是为了 也适用于它的兄弟姐妹 即 等等 当然不是 考虑这个例子 int a 5 a 4 this will make a 9 现在考虑等效表达式 a a 4 T
  • 多个线程访问一个变量

    我在正在读的一本教科书中发现了这个问题 下面也给出了解决方案 我无法理解最小值怎么可能是 2 为什么一个线程不能读取 0 而所有其他线程都执行并写入 1 而无论是1还是2 最后写入的线程仍然必须完成自己的循环 int n 0 int mai
  • 重定向 std::cout

    我需要一个类 在其对象的生命周期内将一个 ostream 重定向到另一个 ostream 经过一番修补后 我想出了这个 include
  • 如果我重新分配并且新大小为 0,会发生什么情况。这与释放等效吗?

    给出以下代码 int a NULL a calloc 1 sizeof a printf d n a a realloc a 0 printf d n a return 0 它返回 4078904 0 这个 realloc 相当于 free
  • 文本框中“结束编辑”的事件

    我正在 winform c 中使用文本框 并使用文本在数据库中进行查询 但每次文本更改时 我都需要不断查阅文本框的文本 因此 对于这些 我使用 KeyUp 但这个活动太慢了 文本框编辑完成后是否会触发任何事件 我考虑完成2个条件 控制失去焦
  • 动态菜单创建IoC

    我想知道是否有人知道我如何创建如何使用 AutoFac 之类的东西来让我动态地允许 dll 创建自己的表单和菜单项以在运行时调用它们 所以如果我有一个 员工 dll 新入门表格 证书表格 供应商 dll 供应商详细信息来自 产品形态 在我的
  • 如何使用“路径”查询 XDocument?

    我想查询一个XDocument给定路径的对象 例如 path to element I want 但我不知道如何继续 您可以使用以下方法System Xml XPath Extensions http msdn microsoft com
  • 使用 apachesoap:使用 .net 在 Web 服务中映射复杂数据类型

    我有一个用 Coldfusion 编程的 Web 服务 我试图使用 c net 来使用它 特定的 Web 服务返回一个 Coldfusion 结构 具有键和值的项目的集合 该结构由 Web 服务公开为 apachesoap Map 类型的复
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收

随机推荐

  • 在 oracle 中运行字符串作为查询

    我在 Oracle 中遇到了一个小问题 我尝试创建一个序列 用于在已包含数据的表中生成 ID 我尝试使用以下匿名块 declare y varchar2 2000 BEGIN SELECT CREATE SEQUENCE ID SEQ MI
  • 使用 useEffect() 时最大深度超出反应错误

    错误 警告 超出最大更新深度 当组件在 useEffect 中调用 setState 但 useEffect 没有依赖项数组 或者依赖项之一在每次渲染时发生更改时 就会发生这种情况 const products setProducts us
  • 从一个表中获取另一表中没有记录的记录

    SURVEYS table SurveyID UserID Question Choice1 Choice2 Choice3 RESPONSES table UserID SurveyID Answer 第一个愿望 已实现 显示用户 28
  • iOS 7:如何仅允许 VC 纵向[重复]

    这个问题在这里已经有答案了 我的所有项目都允许以横向 纵向模式查看应用程序 但对于一个视图控制器 我想禁用此功能并仅以纵向显示它 我努力了shouldAutorotate and supportedInterfaceOrientations
  • 如何从 Struts 2 中选定的对象中获取对象属性

    我有一个清单City对象与name and id字段 我使用 Struts2 并且有一个带有 select 标签的 jsp 页面
  • 在 CodeIgniter 中安装omnipay 时出错

    我正在尝试在 CodeIgniter 版本 2 2 4 中添加omnipay 我按照使用此链接安装作曲家的说明进行操作 https philsturgeon uk blog 2012 05 composer with codeigniter
  • 如何限制 Google App Engine 的 Python 版本中特定方法的允许执行时间?

    由于 Google App Engine 的 python 版本不支持信号模块 如果方法在 2 秒内未返回 则调用方法并抛出 捕获异常的最简单方法是什么 如果您正在谈论 RPC 调用 例如数据存储 您可以创建一个带有截止日期的 RPC 请参
  • 在编写使用经销商 API 的应用程序时,我是否需要使用我的经销商域?

    我是 Google Apps 经销商 希望使用 Google API 例如Google Apps 转销商 API自动化我的经销商活动 当我注册成为 Google Apps 经销商时 我获得了一个新的 Google Apps 域 resell
  • 如何在编译时使用不同的接口声明而不混淆 Interface Builder

    例如 如果我的应用程序有多个版本 付费版本和免费版本 并且我希望根据哪个版本拥有不同的界面 那么 Interface Builder 似乎会感到困惑 例如 MyViewController h ifdef FREE interface My
  • Hive 连接优化

    我有两组数据都存储在 S3 存储桶中 我需要在 Hive 中处理这些数据并将输出存储回 S3 每个数据集的示例行如下 DataSet 1 requestId TADS6152JHGJH5435 customerId ASJHAGSJH se
  • 使用cat函数写入csv文件

    我需要使用 cat 函数向 CSV 添加新行 请你们帮帮我好吗 我对 R 的了解有限 这是文件 name1 csv 系统要求我将我的姓名和学生 ID 添加到前几行 homework1 lt data frame homework1 Tota
  • 将多个项目添加到列表中

    static class Program static void Main string carMake string carModel string carColour string bikeModel string bikeMake s
  • 添加边框时 CSS Div 跳转

    我不明白为什么当我将鼠标悬停在第一个框 左上角 上时 框会发生变化 我已将 box sizing 设置为 border box 因此悬停时添加的边框不会产生影响 并且它只发生在第一个框上 请帮忙 JS小提琴here box sizing b
  • AngularJS 中防止 IE 缓存的更好方法?

    我目前使用 service resource 进行 ajax 调用 在本例中为 GET 并且 IE 缓存这些调用 以便无法从服务器检索新数据 我使用了通过谷歌搜索找到的一种技术来创建一个随机数并将其附加到请求中 这样 IE 就不会去缓存数据
  • mc:edit 不适用于具有 Mandrill Javascript API 的 Mailchimp 模板

    我正在尝试使用 Mailchimp 模板通过 Mandrill API 发送电子邮件 我正在使用 Parse com 在云代码中执行此操作 请参阅此处https www parse com docs cloud modules guide
  • React Native TypeError:网络请求因 fetch() 失败

    我正在使用 React Native 来开发 Android 应用程序 通过此获取请求 我收到错误TypeError network request failed fetch https pixabay com api key MY KEY
  • R 中的自动虚拟变量

    我有以下创建的数据框 temp lt as data frame with uadm table prlo state code 我希望创建 11 个虚拟变量 前 10 名各一个 其他 一个 可以通过以下方式轻松找到前 10 名 top10
  • R过滤器包含子字符串多个条件

    嘿 我有一个 500K 行的列表 我需要按条件进行过滤 其中必须包含某些子字符串 另一个包含 20 个子字符串的列表 我在用dplyr现在打包 我的代码如下所示 result lt data gt filter grepl sub1 col
  • Java邮件与土耳其字符的问题

    我在使用 Java 代码发送的邮件中显示土耳其语字符时遇到问题 这些字符在邮件中显示为问号 Message msg new MimeMessage mailSession msg setHeader Content Encoding ISO
  • SetWindowsHookEx 全局键盘挂钩未捕获所有按键

    我正在编写属于自动化系统一部分的代码 我想添加一个键盘钩子来提前结束测试 我通过使用 SetWindowHookEx 来做到这一点 我的代码看起来很像这样 http support microsoft com kb 318804 这是我的