1

我现在正在编辑这个项目,因为我认为我已经查明了问题,这似乎是 Win8.1 和 Win10 的操作系统错误。问题摘要仍然与“低级别鼠标挂钩不会在管理进程上触发 mousedown/mouseup 事件”之前相同......对于管理应用程序,如果非管理员启动自己的低级别挂钩。

重现问题的步骤:

  1. 在此处下载演示应用程序
  2. 以管理员身份运行应用程序
  3. 确保监视鼠标向上/向下/单击事件
  4. 确认在第 2 步启动的应用程序能够监控管理进程(包括其自己的窗口)上的鼠标向上/向下/单击事件
  5. 以非管理员身份运行该应用的另一个实例
  6. 确保监视鼠标向上/向下/单击事件

结果:请注意,以管理员身份运行的应用程序实例(从 #2 开始)现在无法获取鼠标向上/向下/单击事件,但它仍然可以获取其他鼠标事件和所有键盘事件

有没有人遇到过这个问题?

4

1 回答 1

4

操作:

...并且它确认当前台窗口以 admin 运行时不会触发 mouseup/mousedown事件

操作:

如果我的应用程序没有以管理员身份运行,那么我无法获取所有鼠标/键盘事件,

从 Vista 开始,应用程序无法向提升的应用程序发布消息或安装挂钩。这是通过用户界面特权隔离 (UIPI) 和完整性(见下文)实现的。

MSDN:

UIPI 不会干扰或更改具有相同特权(或完整性)级别的应用程序之间的窗口消息传递行为。UIPI通过阻止以下行为来阻止低权限进程访问高权限进程。较低权限的进程不能

  • 对以更高权限运行的进程执行窗口句柄验证。
  • 对以更高权限运行的应用程序窗口使用 SendMessage 或 PostMessage。这些 API 返回成功,但默默地丢弃窗口消息。
  • 使用线程挂钩附加到以更高权限运行的进程。
  • 使用日志挂钩来监视以更高权限运行的进程
  • 对以更高权限运行的进程执行动态链接库 (DLL) 注入。告诉我更多...

我记得在 Vista 出现之前,有一个可爱的 Word 文档,所有关于为 Windows Vista 准备应用程序的内容,但遗憾的是我找不到它。

但如果我的应用程序以管理员身份运行,则它无法获取 mousedown/mouseup 事件

也许你的鼠标钩有问题?没有看到你的代码就不可能说出来。

这是 Windows 的已知问题吗

据我了解,不适用于 Windows Vista+。

告诉我更多

于 2016-02-03T08:26:00.920 回答