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

时间:2012-12-20 12:23:30

标签: c++ windows-8 keyboard sendinput

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

所以我的问题是,如何让它发挥作用?或者是否有另一种显示此菜单的方法?

1 个答案:

答案 0 :(得分:3)

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

Windows 8中有新的UIPI限制。最常用的阻止快捷方式是 Alt + Tab ,因此您将要执行此解决方法。 / p>

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

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

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

最后,SendInput将有效。