当 运行 为非提升时,为提升的应用程序调用 LowLevelKeyboardProc

LowLevelKeyboardProc being called for elevated applications when run as non-elevated

我的应用程序 运行 作为当前用户 没有 管理员权限。然后它安装一个键盘钩子来捕获使用 SetWindowsHookExWH_KEYBOARD_LL 的按键事件(不是 DLL 注入)。对于非管理员 window 的同胞的击键效果很好,但是对于作为管理员 运行 的 window 没有任何作用。我希望它对两者都有效。

从安全的角度来看,我认为这是有道理的,但是这让我很恼火(在 WinAPI 文档中找不到任何表明这一点的信息)。有什么方法可以缓解这种情况而不必 运行 我的应用程序作为管理员?此外,主要替代方案 RawInputAPI 是否仍然存在此问题?

Hans Passant 的建议是我能找到的最佳答案。也就是说,在 app.manifest 中指定 uiAccess="true" 一旦满足要求(签名的应用程序、受保护的目录),这似乎就可以工作。

不幸的是,还有另一个问题,即如何从另一个使用 uiAccess 签名的应用程序启动该应用程序。这是一个单独的问题:

Is it possible to start a process with uiAccess=true from another process with uiAccess=true