以编程方式按Win + X,Alt-Tab

Mau*_*den 6 c++ keyboard sendinput windows-8

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

所以我的问题是,如何使这个工作?或者是否有另一种显示此菜单的方法?

Nic*_*son 3

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

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

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

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

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

最后,SendInput会工作。