1

アクティブまたは最小化できる ac# winforms アプリがあります。アプリが「Alt + D」に何に応答しても、既存のショートカットをキャプチャしてオーバーライドできるようにしたいと考えています。

アプリにフォーカスがある場合、これを行うことができます

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == (Keys.Alt | Keys.D))
        {

            return true;    
        }


        return base.ProcessCmdKey(ref msg, keyData);
    }

しかし、アプリにフォーカスがない場合は実行されません。たとえば、Firefox 内にいる場合、Ctrl D キーストローク シーケンスがアクティブになりません。

どうすればこれを機能させることができますか?

理想的には、マウスで強調表示したり、任意のアプリでテキストを選択したり、Alt D を押して、このテキストをアプリに送信したりしたいと考えています。

アップデート

http://www.fluxbytes.com/csharp/how-to-register-a-global-hotkey-for-your-application-in-c/

これは私にとって完璧に機能しました

4

3 に答える 3

1

キーボード イベントは通常、現在フォーカスされているアプリケーションに送信されます。アプリケーションがフォーカスされていないときにキーボード イベントを処理するには、通常、キーボード フックを設定する必要があります。

フックを使用すると、基本的に、イベントがターゲット アプリケーションに渡される前に、ルーチンがイベントをインターセプトできます。

ただし、これを試みないことを強くお勧めします。他のアプリケーションに送信されたキーボード イベントを処理するアプリケーションは、非常に煩わしいものです。これにより、他のアプリケーションを期待どおりに使用できなくなります。通常、キーストロークを盗んでいるアプリをアンインストールすることで対応します

于 2013-08-21T14:59:34.897 に答える
0

別のサービスを使用して、キープレスを常に検出し、アプリと通信することができます。同様の質問があります: C# での特定のキーストロークの監視

于 2013-08-21T14:57:18.460 に答える
0

あなたが探しているのはキーボードフックのようです: http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C

このクラスを使用すると、アプリケーションがバックグラウンドで実行されている場合やユーザー インターフェイスがまったくない場合でも、キーボードやマウスをタップしたり、それらのアクティビティを検出したりできます。このクラスは、KeyEventArgs と MouseEventArgs で一般的な .NET イベントを発生させるため、必要な情報を簡単に取得できます。

于 2013-08-21T14:58:57.167 に答える