こんなアプリをつくります。テキストエディタに文字入力するためにキーを押すとそのキーがアプリにも表示されます。

動画を使えば作成したプログラムがどのように動くのか説明しやすくなります。ところがそのときにどのキーを押したのかもわかるようにしたいです。ところが通常は他のアプリを操作しているときにどのキーが押されたかを知ることはできません。これを知るためにはグローバルフックをする必要があります。

フックをすればあるスレッド上で発生したイベントを監視、捕捉してそれに応じて処理を行なうことができます。

ローカルフックは一つのスレッドに対して監視するもので、自身のアプリケーションで主に使います。グローバルフックはすべてのスレッドに対する監視ができます。

KeyboardHookクラス

KeyboardHookというクラスを作成します。これでキーボードの操作に関してはフックすることができます。

Form1クラスにおける処理

まずデザイナで以下のようなものをつくります。

キーが押されているときはそのキーを表示し、離されたら表示をやめます。A-ZキーとShiftキー、Ctrlキー、Altキーは別に扱います。それ以外のキーはそのまま表示します(わける理由はShiftキーやCtrlキーを押しながらA-Zキーが押されている場合、それがわかるようにするため)。

KeyCodeからどのキーが押されているか調べるためにKeysConverterクラスを使っています。