在 Windows XP 中使用 SetWindowsHookEx 时出错,但在 Windows 7 中则不会

2023-12-12

我开发了一个使用全局键盘/鼠标挂钩的应用程序。它在 Windows 7 中完美运行,但在 Windows XP 中则不然。

当我在 Windows XP 中调用 SetWindowsHookEx 时,收到错误代码 1428

int MouseLowLevel   = 14
int code = SetWindowsHookEx(MouseLowLevel,
                 MouseHookProc,
                 IntPtr.Zero,
                 0);

private IntPtr MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam) {}

很好奇这段代码在 Win7 上不会失败,但我当然从未尝试过。但这是正确的行为,看起来他们改进了它。 SetWindowsHookEx() 的参数验证需要有效的非零第三个或第四个参数。错误代码具有很强的描述性,来自 WinError.h:

//
// MessageId: ERROR_HOOK_NEEDS_HMOD
//
// MessageText:
//
// Cannot set nonlocal hook without a module handle.
//
#define ERROR_HOOK_NEEDS_HMOD            1428L

任何模块句柄都可以,因为它实际上并不用于低级挂钩,不需要注入 DLL 即可使它们工作。 .NET 4 在选择一个时需要小心,因为它的 CLR 不再为纯托管程序集伪造模块句柄。一个很好用的方法是通过 pinvoking LoadLibrary("user32.dll") 得到的方法,因为它总是已经加载的。您不必调用 FreeLibrary()。

您需要此声明来调用 LoadLibrary:

[DllImport("kernel32", SetLastError=true, CharSet = CharSet.Auto)]
private static extern IntPtr LoadLibrary(string fileName);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Windows XP 中使用 SetWindowsHookEx 时出错,但在 Windows 7 中则不会 的相关文章

  • 静态只读字符串数组

    我在我的 Web 应用程序中使用静态只读字符串数组 基本上数组有错误代码 我将所有类似的错误代码保存在一个数组中并检查该数组 而不是检查不同常量字符串中的每个错误代码 like public static readonly string m
  • 适合初学者的良好调试器教程[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有谁知道一个好的初学者教程 在 C 中使用调试器 我感觉自己好像错过了很多 我知道怎么做 单步执行代码并查看局部变量 虽然这常常给我带来问
  • 为什么在 WebApi 上下文中在 using 块中使用 HttpClient 是错误的?

    那么 问题是为什么在 using 块中使用 HttpClient 是错误的 但在 WebApi 上下文中呢 我一直在读这篇文章不要阻止异步代码 https blog stephencleary com 2012 07 dont block
  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • 使用可变参数包类型扩展的 C++ 函数调用者包装器

    我绑定了一些 API 并且绑定了一些函数签名 如下所示 static bool WrapperFunction JSContext cx unsigned argc JS Value vp 我尝试将对象和函数包装在 SpiderMonkey
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • 为什么从字典中获取时会得到 Action<> 的克隆?

    我有以下字典 private Dictionary
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • OpenGL:仅获取模板缓冲区而没有深度缓冲区?

    我想获取一个模板缓冲区 但如果可能的话 不要承受附加深度缓冲区的开销 因为我不会使用它 我发现的大多数资源表明 虽然模板缓冲区是可选的 例如 排除它以利于获得更高的深度缓冲区精度 但我还没有看到任何请求并成功获取仅 8 位模板缓冲区的代码
  • 在 Windows Phone silverlight 8.1 上接收 WNS 推送通知

    我有 Windows Phone 8 1 silverlight 应用程序 我想使用新框架 WNS 接收通知 我在 package appxmanifest 中有
  • 堆栈是向上增长还是向下增长?

    我在 C 中有这段代码 int q 10 int s 5 int a 3 printf Address of a d n int a printf Address of a 1 d n int a 1 printf Address of a
  • 灵气序列解析问题

    我在使用 Spirit Qi 2 4 编写解析器时遇到一些问题 我有一系列键值对以以下格式解析
  • 如何使用 C++11 using 语法键入定义函数指针?

    我想写这个 typedef void FunctionPtr using using 我该怎么做呢 它具有类似的语法 只不过您从指针中删除了标识符 using FunctionPtr void 这是一个Example http ideone
  • 不区分大小写的字符串比较 C++ [重复]

    这个问题在这里已经有答案了 我知道有一些方法可以进行忽略大小写的比较 其中涉及遍历字符串或一个good one https stackoverflow com questions 11635 case insensitive string

随机推荐

  • iReport 表,每行都有重复的附加记录

    我在整个互联网和这个论坛上进行了搜索 但我找不到实现如下表所示内容的方法 我在用着iReport 4 7 1 请给我一个提示吗 这很容易 您应该添加文本域元素到Detail下带文本字段与字段 这是一个示例 报告设计于iReport The
  • Phaser 3 中的阴影和定向光?

    我正在 Phaser 3 中制作一个自上而下的游戏 想要一个手电筒效果 有没有办法以锥形的方式向某个方向投射光 也许可以像这样工作 this flashlightBeam this lights add directionalLight x
  • 访问接口方法而不引用类

    假设我在一个名为 Interface 的项目中有一个这样的接口 public interface TestInterface string Operation 以及实现它的类 该类位于另一个项目 Class 中 public class T
  • Spark读取非UTF-8编码的整个文本文件

    我想通过以下方式读取非 UTF 8 编码的整个文本文件 val df spark sparkContext wholeTextFiles path 12 toDF 化为火花 如何更改编码 我想读取 ISO 8859 编码的文本 但它不是 C
  • IE 中 window.opener 的 JavaScript 问题

    我正在尝试使用以下 JavaScript 来检查弹出页面是否仍然打开 父页面 调用页面以打开弹出窗口 已打开 但此代码仍然失败 我从一个 aspx 弹出页面调用它 该页面在另一个母版页中有一个母版页 因此 最终调用此脚本的单击事件是内容占位
  • C# 中的 ref 和 out 参数不能标记为变体

    该声明的含义是什么 从这里 C 中的 ref 和 out 参数以及 不能被标记为变体 1 是否意味着不能进行以下操作 public class SomeClass
  • 删除异常值无法运行 cor.test()

    我正在从数据集的单列中提取异常值 然后我尝试运行cor test 在该列加上另一列 我收到错误 Error in cor test default dep delay noout distance x and y must have the
  • 如何更快地从 Firebase Firestore 获取数据?

    我是编程和 iOS 开发方面的新手 我正在尝试使用 Firebase 中的 Firestore 数据库制作一个应用程序 我不知道这是否正常 但是当我尝试从 firestore 数据库获取数据时 它对我来说似乎太长了 我不知道我是否犯了错误
  • 如何为 TGraphicControl 的后代组件添加鼠标滚轮支持?

    我创建了一个源自 TGraphicControl 的 delphi 组件 是否可以添加对鼠标滚轮的支持 编辑 我已经公开了 MouseWheel 事件 如下所示 但它们没有被调用 TMyComponent class TGraphicCon
  • GitHub 克隆错误:无法克隆并出现 EOF 错误

    我正在尝试使用 Ubuntu 13 04 从 GitHub 私人存储库克隆我的项目 我总是收到如下错误 error RPC failed result 18 HTTP code 200 17 KiB s fatal The remote e
  • 从 Excel 创建 Outlook 应用程序会生成类型不匹配错误

    我正在尝试使用 Outlook 模板创建 Outlook 电子邮件 On the Set obApp Outlook Application行 我收到错误 错误 13 类型不匹配 我似乎使用了本网站上有关该主题的其他帖子中使用的相同语法 我
  • 数据库继承的技术?

    当您需要将继承的类持久化到不支持继承的关系数据库时 有哪些技巧 技巧 假设我有一个经典的例子 Person gt Employee gt Manager gt Team lead gt Developer gt Customer gt Pr
  • 为 ASP.net 子控件生成 HTML“名称”属性,而不是唯一的“ID”属性

    为我的自定义 ASP net 服务器控件生成的 HTML 代码生成子控件的 name 属性 而不是 id 属性 像这样的东西 span span
  • HTTPWebResponse 原始响应,使用反射

    HTTPWebResponse 公开了 headers 的属性 是否可以获取原始响应就像我们使用套接字一样 标题和内容结合使用反射 我想一定有办法的 我可以使用套接字 但需要做很多工作才能使它们可用 例如代理支持 https 进度事件等 列
  • Javascript onclick 用 for 循环显示数组的最后一个元素

    我的问题不大 我正在研究一家公司的 KPI 我请求活动 他们给我返回一系列活动 这是代码的一部分 client requestActivities function activities if activities length gt 0
  • Android:视频录制抛出错误

    因此 我尝试使用内置相机活动来使用以下代码录制视频 Intent videoIntent new Intent MediaStore ACTION VIDEO CAPTURE videoIntent putExtra MediaStore
  • Android 在 asynctask 中设置文本

    我正在开发 UDP 程序 但我在申请时遇到问题setText in my asynctask 基本上在 UDP 服务器上 我只要求输入一个端口 然后服务器应该连接到本地主机和端口 ATextView布局中间显示 当前未连接 当我单击 连接到
  • 如何使用 LINQ、C# 向元素添加属性?

    我有一个具有许多属性的 XElement 对象 我只想向该元素添加另一个属性 我该怎么做呢 xElement Add new XAttribute Foo Bar
  • PHP/MySQL:对数据库中的重复事件进行建模,但查询日期范围

    我正在开发一个 我想要的 简单的 PHP MySQL 应用程序 作为其中的一部分 我希望能够对重复事件进行建模 但是我需要能够查询两个日期之间发生的所有事件 包括重复事件 事件只有日期 一天中的时间并不重要 我一直在研究这个问题并研究了各种
  • 在 Windows XP 中使用 SetWindowsHookEx 时出错,但在 Windows 7 中则不会

    我开发了一个使用全局键盘 鼠标挂钩的应用程序 它在 Windows 7 中完美运行 但在 Windows XP 中则不然 当我在 Windows XP 中调用 SetWindowsHookEx 时 收到错误代码 1428 int Mouse