6

我正在尝试在 Windows 8 上模拟 Win+X 的按键事件,该事件应该会弹出一个小菜单,但我无法通过使用 SendInput 使其工作。对于任何其他组合键(例如 Win+R、Win+E、Win+D),它都有效,但不适用于 Win+X。我注意到 Synergy+ 有同样的问题,但 Windows 屏幕键盘没有。我还查看了屏幕键盘使用的 SendInput 参数,但如果我在应用程序中使用完全相同的参数,我仍然无法获得菜单。

所以我的问题是,我该如何让它工作?或者有没有其他方法来显示这个菜单?

4

1 回答 1

3

我最近在我们的应用程序中添加了对此的支持。很高兴我们击败了我们的竞争对手!

Windows 8 中有新的 UIPI 限制。最常用的被阻止快捷方式是Alt+ Tab,因此您需要解决此问题。

您必须uiAccess="true"在清单中标记您的二进制文件。(有关如何执行此操作的更多详细信息,请 google。)此清单可防止启动二进制文件,除非使用 Microsoft 批准的代码签名证书进行签名并安装在“安全位置”(system32 或 Program Files/Program Files (x86)) .

如果您从任何助手启动程序: uiAccess 二进制文件无法CreateProcess从中等完整性进程启动(清单将其标记为需要“高”完整性)。相反,最简单的方法是使用ShellExecute“open”启动它,让 shell 提升它。如果 using CreateProcessAsUser,则必须设置TokenUIAccess为 1 using SetTokenInformation,否则启动将失败。

最后的附带条件:请注意,uiAccess 非常严格地限制了进程可以执行的操作。您无法从正常(中等完整性)进程接收 UI 输入,因此其他应用程序无法与您的窗口交互。如果您尚未遵循将 UI 分离到单独进程中的良好做法,那么这将是这样做的一个很好的理由。或者,可以将需要 uiAccess 的任务放入一个小的、自包含的辅助二进制文件中,并与非 UI 进程完全分离。您的主应用程序可以将其作为高完整性帮助进程运行,该进程会根据需要发送指令以执行这些特定任务(例如SendInput)。

最后,SendInput会工作。

于 2012-12-20T15:15:03.117 回答