ネイティブの.NETメソッドまたはuser32.dllのgetKeyBoardStateに相当しますか?
-
02-10-2019 - |
質問
答え: この方法には、ネイティブに管理された同等物はありません。ただし、管理されたコードAPIを管理する良い例は、 pinvoke.net.
こんにちは、みんな
「トレースモード」のフラグを受け入れるアプリケーションがあります。トレースモードは、テキストボックスを含むフォームをオンにします。テキストボックスには、カスタムTraceListenerオブジェクトを介して出力が表示されます。コマンドラインに-tが存在する場合、トレースウィンドウは独自の低優先度スレッド内から開きます。何かがうまくいかないときにアプリケーションを診断しようとしているコンサルタントにとっては便利です。
少数のコンサルタントは、起動中に不明瞭なキーの組み合わせを押すとトレースモードをオンにすることを要求しているため、毎回アクティブ化するためにコマンドラインに行く必要はありません。それは合理的な要求です。
コンサルタントが気にする重要な情報の多くが、さまざまなコンポーネントがインスタンス化され、初期化されるため、メインフォームが作成される前にスタートアップでトレースするように表示されるために、このためのボタンやメニュー項目を提供したくありません。
.NETの現在のキーボード状態を検出するのに十分なシンプルだったはずだと思っていましたが、私が見ているところはどこでも、[dllimport( "user32.dll"、entrypoint = "getKeyBoardState"、setLasterRor = true)を使用することです。 ]何が起こっているのかを検出する方法として。
それはすべてうまくいっています - 私はそれに満足しています。しかし、一般的な経験則として、私は自分のものをロールしようとする前に、Windows関数にネイティブ.NETマネージドコードを使用していることを確認しようとします。
ネイティブの.NETメソッドまたはuser32.dllのgetKeyBoardStateに相当しますか?
解決
Control.ModiferKeys
の静的プロパティです Control
現在、修飾子キーが押されています。私は一般的なキーボード状態を取得するために何も知らないのですが、ほとんどのコードP/がどちらかを呼び出しているようです GetKeyboardState
また GetKeyState
特定のキーをチェックするため。
他のヒント
PreviewKeyDownEventargsには必要なものがないことを確認してください。もしそうなら、PreviewKeyDownイベントを使用できます。
別のオプションは、アクセラレータキーです。 Windows API関数は、アプリケーションのリソースでアクセラレータテーブルを使用して、キーボードシーケンスをコマンドにマッピングできます。コマンドはメニュー項目と同じことです。ご存知のように、wm_commandメッセージ。 C ++を使用してMFCで簡単に行うのは簡単だと思いますが、それを行うC#の方法を見つけようとしたとき、私は迷子になりました。 C#を使用してアクセラレータキーを実行する方法を理解できる場合は、柔軟なソリューションになる可能性があります。