低级鼠标挂钩不会在管理进程

时间:2016-02-03 08:16:54

标签: c# windows-8.1 windows-10 mouse-hook

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

重现问题的步骤:

  1. 下载演示应用here
  2. 以管理员身份运行应用
  3. 确保监控鼠标上/下/点击事件
  4. 确认在步骤2中启动的应用程序能够监控管理进程上的鼠标上/下/点击事件(包括在其自己的窗口上)
  5. 以非管理员身份运行该应用的另一个实例
  6. 确保监控鼠标上/下/点击事件
  7. 结果:请注意,作为管理员运行的应用程序实例(从#2开始)现在无法获得鼠标上/下/点击事件,但它仍然可以获取其他鼠标事件和所有键盘事件

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

1 个答案:

答案 0 :(得分:3)

OP:

  

...并确认当前景窗口以管理员身份运行时,不会触发mouseup / mousedown事件。

OP:

  

如果我的应用运行作为管理员,那么我无法获取所有鼠标/键盘事件,

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

MSDN:

  

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

     
      
  • 对以更高权限运行的进程执行窗口句柄验证。
  •   
  • 将SendMessage或PostMessage用于以更高权限运行的应用程序窗口。这些API会返回成功,但会以静默方式删除窗口消息。
  •   
  • 使用线程挂钩附加到以更高权限运行的进程。
  •   
  • 使用日记记录挂钩来监控以更高权限运行的流程
  •   
  • 对运行具有更高权限的进程执行动态链接库(DLL)注入。 Tell me more...
  •   

我记得在Vista推出之前,有一个可爱的Word文档,主要是关于为Windows Vista准备应用程序,但遗憾的是我无法找到它。

  

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

也许你的鼠标钩有问题?没有看到你的代码就无法判断。

  

这是Windows的已知问题

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

告诉我更多