2012-12-20 30 views
6

我試圖模擬Windows 8上Win + X的按鍵事件,它應該會彈出一個小菜單,但我一直無法通過使用SendInput來獲得此功能。對於任何其他密鑰組合(例如Win + R,Win + E,Win + D),它都適用,但不適用於Win + X。我注意到Synergy +有同樣的問題,但Windows屏幕鍵盤沒有。我還查看了屏幕鍵盤使用的SendInput參數,但如果我在應用程序中使用的參數完全相同,我仍然無法獲得菜單。以編程方式按Win + X,Alt-Tab

所以我的問題,我如何得到這個工作?或者有其他的方法來顯示這個菜單嗎?

回答

3

我最近在我們的應用程序中添加了對此的支持。很高興我們擊敗了我們的競爭對手!

有在Windows 8的新UIPI限制中最常用的快捷方式受阻是Alt鍵 + 標籤,所以你會想要做的解決方法。

您必須在清單中用uiAccess="true"標記您的二進制文件。 (有關如何執行此操作的更多詳細信息,請參閱google。)此清單可防止啓動二進制文件,除非使用Microsoft批准的代碼簽名證書籤署並安裝在「安全位置」(system32或Program Files/Program Files(x86))中。

如果您從任何助手啓動您的程序:uiAccess二進制文件無法從中等完整性進程CreateProcess啓動(清單標記爲需要「高」完整性)。相反,使用ShellExecute「open」啓動它可以讓shell提升它,這是最容易的。如果使用CreateProcessAsUser,則必須使用SetTokenInformationTokenUIAccess設置爲1,否則啓動將失敗。

最終條款:請注意,uiAccess會嚴重限制流程的功能。您無法從正常(中等完整性)進程接收UI輸入,因此其他應用程序無法與您的窗口進行交互。如果您尚未遵循將您的用戶界面分成單獨流程的良好實踐,那麼這將是一個很好的理由。或者,需要使用uiAccess的任務可以放入小型自包含輔助二進制文件中,並且完全與非UI進程分離。您的主應用程序可以將其作爲高完整性的幫助程序運行,並根據需要發送說明以執行這些特定任務(如SendInput)。

最後,SendInput將工作。

+1

現在你的競爭對手就會在這裏站起來。 :-) –

+0

我懷疑有人會因爲這個而改變程序...;) –

+1

請注意,uiAccess = true可能會阻止其他具有較低特權的程序拖放。 –