これを行うには複数の方法があります。複数のキーが同時に押されると、キーごとに 1 回、イベントが複数回発生するため、およびイベントが発生Form.KeyDown
したときに各キーの現在の状態を追跡できます。または、メソッドを使用してアプリケーションのメッセージ フィルターに を追加することで、同様のことを行うことができます。このように各キーの状態を自分で追跡することは、多くのキーを頻繁に検査する必要がある場合に意味があるかもしれませんが、はるかに単純なアプローチで、おそらく同じくらい効率的な方法は、各キーの状態を単純にチェックすることです。必要に応じて、Joseph Lee が推奨する方法 (.NET Framework 3.0 以降) を使用するか、user32.dll (3.0 以前のフレームワーク) で Win32 API 呼び出しを使用します。KeyDown
KeyUp
KeyMessageFilter
Application.AddMessageFilter
Keyboard.IsKeyDown
GetKeyState
以下のコメントであなたの質問に答えるために、user32.dll は標準の Windows ライブラリです。これは、まとめて Win32 API と呼ばれる標準ライブラリのリストの 1 つです。Windows と同じくらい長い間、95 より前から存在しています。これはアンマネージ ライブラリです。つまり、簡単に言えば、.NET で記述されておらず、.NET フレームワークを使用していません。これらは基本的に、Windows OS と直接通信するための手段です。
.NET フレームワークで提供されるメソッドの多くは、古い Win32 API 呼び出しの単なるラッパーです。.NET フレームワークのマネージ クラスが同じ機能を提供する場合、ほとんどの場合、Win32 API 呼び出しの代わりにそれを使用する必要があります。管理ライブラリが Win32 API よりも好まれる理由は複数あります。
- 理想的には、.NET アプリは OS に依存しないはずです。Win32 API 呼び出しを呼び出すと、アプリケーションは Windows でのみ実行され、より具体的には、その API 呼び出しを明確にサポートする Windows のバージョンでのみ実行されます。
- アンマネージ コードの呼び出しには、バックグラウンドでのデータ マーシャリングが必要なため、マネージ コードの呼び出しほど高速ではありません。.NET フレームワークのメソッドの多くは完全にマネージ コードで実装されているため、アンマネージ コードの舞台裏での呼び出しは実際には必要ありません。
- 管理されたライブラリは、単純に使いやすいです。それらはオブジェクト指向であり、標準のデータ型を使用します。Win32 API 呼び出しの多くは、ポインターとカスタム構造体を使用しているため、呼び出しが困難ではありますが、不可能ではありません。
したがって、フレームワークのバージョン 3.0 以降でアプリを開発している場合は、Keyboard
マネージ コードであるため、このクラスを使用することをお勧めします。他のオプションが機能しない場合を除き、Win32 API のみを使用します。