2

回答:このメソッドに相当するネイティブ マネージはありません。ただし、マネージ コード API の良い例はpinvoke.netにあります。

こんにちは、みんな

「トレース モード」のフラグを受け入れるアプリケーションがあります。トレース モードは、テキスト ボックスを含むフォームをオンにします。テキスト ボックスには、カスタム TraceListener オブジェクトを介して出力が表示されます。コマンドラインに -t が存在する場合、トレース ウィンドウは優先度の低いスレッド内から開かれます。何か問題が発生したときにアプリケーションを診断しようとしているコンサルタントにとって便利です。

何人かのコンサルタントは、起動時にいくつかのあいまいなキーの組み合わせを押すと、トレース モードがオンになり、コマンド ラインに移動して毎回アクティブにする必要がなくなるようにするように要求しました。合理的な要求です。

さまざまなコンポーネントがインスタンス化および初期化されるため、メイン フォームが作成される前に、コンサルタントが気にする多くの重要な情報が Trace に表示されるため、このためのボタンやメニュー項目を提供したくありません。

.NET で現在のキーボードの状態を検出するのに十分単純なはずだと思っていましたが、どこを見ても [DllImport("user32.dll", EntryPoint = "GetKeyboardState", SetLastError = true) を使用するようにアドバイスされているようです。 ] 何が起こっているかを検出する方法として。

それはすべてうまくいっています-私はそれで満足しています。ただし、一般的な経験則として、独自のロールを作成する前に、Windows 関数にネイティブの .NET マネージ コードを使用するようにしています。

ネイティブ .NET メソッドまたは user32.dll の GetKeyboardState に相当するものはありますか?

4

2 に答える 2

1

Control.ModiferKeysControlもしあれば、修飾キーが現在押されている静的プロパティです。一般的なキーボードの状態を取得する方法については何も知りません。ほとんどのコード P/Invoke のいずれかGetKeyboardStateまたはGetKeyState特定のキーをチェックするためのようです。

于 2010-07-05T01:25:49.117 に答える
0

PreviewKeyDownEventArgsに必要なものがないことを確認しますか?含まれている場合は、PreviewKeyDownイベントを使用できます。

別のオプションはアクセラレータキーかもしれません。Windows API関数は、アプリケーションのリソース内のアクセラレータテーブルを使用して、キーボードシーケンスをコマンドにマップできます。コマンドはメニュー項目と同じです。ご存知のとおり、WM_COMMANDメッセージです。C ++を使用してMFCで実行するのは簡単ですが、C#で実行する方法を見つけようとすると、迷子になりました。C#を使用してアクセラレータキーを実行する方法を理解できれば、柔軟なソリューションになる可能性があります。

于 2010-07-05T02:57:09.143 に答える