0

現在、プッシュツートークボイスチャットアプリケーションと同様の機能を作成しようとしていますが、これまでのところ、これに適したソリューションは見つかりませんでした。MFCまたはCLRを使用していません。

問題は非常に単純です。私のウィンドウは通常焦点が合っていない(つまり最小化されているなど)はずですが、キーの押下に反応する必要があります(基本的に、ボタンが押されているかどうかさえ知りたくありません)。残念ながら、WM_KEYDOWNは、ウィンドウにキーボードフォーカスがある場合にのみ機能します。たとえば、TeamspeakがこれにDirectInputを使用していることは知っていますが、DirectInputがなくても確実に実行できることも認識しています。これは、私が強く望んでいることです。

私が機能させることができる他の唯一の解決策は、GetAsyncKeyStateを使用したポーリングですが、これも良い解決策とはほど遠いようです。可能であれば、Windowsメッセージを使用したいと思います。

4

2 に答える 2

2

RegisterHotKeyこの問題は、グローバルな低レベルのキーボードフックを使用するか、使用することで解決できます。

RegisterHotKey(Cody Greyが表彰で提案した)ここではおそらくより適切な選択です。

于 2011-03-10T12:03:26.070 に答える
0

ジョンに同意します。user32.dllとRegisterHotKey関数を使用します。非常に便利なサンプルコードは次の場所にあります:https ://www.codeproject.com/kb/cs/kiosk_cs.aspx?display = print

私が最初にそうであったように、コードが完全にぎこちないように見え、何をすべきかわからない場合は、チュートリアルをご覧ください:https ://www.youtube.com/watch?v= qQWqGOaZiFI非常に便利です!

システムホットキーを登録しようとした場合:ただし、登録しようとしたシステムホットキーによっては、最初のリンクのコードがエラーを返すことに注意してください。問題を浮き彫りにするこれに関する私の質問:user32.dllでシステムホットキーを無効にするにはどうすればよいですか?(現在未解決)。システムホットキーをオーバーライドしようとすると、発生するエラーの1つを修正するコード編集もあります。

[DllImport("user32.dll", SetLastError = true)]

Windows + Eホットキーをブロックすることはできましたが、 Alt+F4Home+Rightなどの他のキーは無効にならず、エラーが返されました。

システムホットキーを上書きしようとしない場合、これは問題にはなりません。ただし、ホットキーの1つが登録に失敗した場合は、以下のコードを使用してコードを診断することをお勧めします。

Marshal.GetLastWin32Error()

^そのコード行の完全なコンテキストは、最初のリンクにあります。

于 2017-04-10T09:17:38.170 に答える