我现在正在编辑这个项目,因为我认为我已经找到了问题,这似乎是Win8.1和Win10的操作系统错误。问题摘要仍然与之前相同"低级别鼠标挂钩在管理进程中不会触发mousedown / mouseup事件" ...如果非管理员启动,则为管理员应用它自己的低水平钩。
重现问题的步骤:
结果:请注意,作为管理员运行的应用程序实例(从#2开始)现在无法获得鼠标上/下/点击事件,但它仍然可以获取其他鼠标事件和所有键盘事件
有没有人遇到过这个问题?
答案 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 +。