2012-12-20 12 views
6

小さなメニューをポップアップするはずのWin + Xのキー押しイベントをシミュレートしようとしていますが、SendInputを使ってこれを動作させることができませんでした。他のキーの組み合わせ(Win + R、Win + E、Win + Dなど)ではWin + Xでは動作しません。私は、Synergy +に同じ問題があることに気付きましたが、Windowsのオンスクリーンキーボードはそうではありません。画面上のキーボードで使用するSendInputのパラメータも調べましたが、アプリケーションで同じパラメータを使用しても、メニューは表示されません。プログラムでWin + X、Alt-Tabを押す

私の質問ですが、これをどのように機能させるには?または、このメニューを表示する別の方法がありますか?

答えて

3

私は最近、これをアプリケーションに追加しました。私たちはそれに競争相手を打ってうれしい!あなたは回避策を実行したいとしているので、

は、最もよく使用されるブロックされたショートカットは、Altキー + タブでのWindows 8の新しいUIPIの制限があります。

マニフェストにバイナリをuiAccess="true"とマークする必要があります。 (この方法の詳細については、googleを参照してください)。このマニフェストは、マイクロソフトが承認したコード署名証明書で署名され、「安全な場所」(system32またはProgram Files/Program Files(x86))にインストールされていない限り、 。

任意のヘルパーからプログラムを借りる場合:uiAccessバイナリは、中位の整合性プロセスからCreateProcessで起動することはできません(マニフェストでは、 "高い"整合性が要求されます)。代わりに、ShellExecute "open"を使用して起動してシェルを昇格させるのが最も簡単です。 CreateProcessAsUserを使用している場合は、SetTokenInformationを使用してTokenUIAccessを1に設定するか、起動が失敗します。

最終条件:uiAccessは、プロセスが何をすることができるかをかなり制限することに注意してください。通常の(中位の)プロセスからUI入力を受け取ることはできないため、他のアプリケーションはウィンドウとやり取りできません。 UIを別のプロセスに分けるうえで優れた方法に従わなければ、それはそうするのが良い理由です。代わりに、uiAccessを必要とするタスクは、小さな自己完結ヘルパーバイナリに入れて、UI以外のプロセスから完全に分離することもできます。あなたのメインアプリは、それらの特定のタスクを実行するために必要な指示(例えば、SendInput)を送信された、高い整合性のあるヘルパープロセスとして実行することができます。

最後に、SendInputが機能します。

+1

ここであなたの競合相手がここで頭を上げます。 :-) –

+0

私は誰もがこれを理由にプログラムを変更するとは思わない...;) –

+1

uiAccess = trueは、より少ない特権を持つ他のプログラムからのドラッグアンドドロップを防ぐかもしれないことに注意してください。 –

関連する問題