キーボードのエミュレート(DirectInput)

      2016/05/12

キーボードの押下検知とは

「キーボードの押下検知」とは、プログラムで「キーボードのキーが押された」ということを検出することです。
現在のWindowsプログラミングでは、キーボードが押されたことを検知する処理はメッセージ(WM_KEYDOWNやWM_KEYPRESS)などで簡単に可能です。
ですが今回は、DirectInputを使ったキーボード押下検知について書きます。

 

実装してみる

実装したコード

 

コードの説明

7から11行目

定数の指定やヘッダのインクルード、リンクする必要があるライブラリの指定です。
‘DIRECTINPUT_VERSION’の定数指定は、ちょっと不自然ですが、この指定がないと、ビルド時に警告がでます(DirectInputに対するバージョン指定を行わなければいけない)。
21から22行目

使用するDirectInputのオブジェクトと、DirectInputキーボードのオブジェクトの変数宣言です。
当プログラム中では、この変数に対する処理でDirectInputへのアクセスを行っています。

 

65から84行目

ここはWindowsのメッセージループ中で、キーボードの押下検知を行う処理です。
また、メッセージループを脱出したところで、

lpKeyboard->Release();
lpDI->Release();

を呼び出すことでDirectInputのオブジェクトと、DirectInputキーボードの終了時処理を行っています。

139から170行目

ここはプログラム起動時の処理で、DirectInputの初期化処理を行っています。

 

まとめ

この実装コードでプログラムをビルド、動作させると

[ESC]キーを押したときにプログラムが終了する。

だけの動作をします。

これだけでは、「実装するのに手間がかかりそうだし、通常のメッセージによるキーボード押下検出のほうがお手軽」と思われるかもしれません。

今回は書ききることができませんでしたが、実はこの「DirectInputを使う検出処理」は、用途によっては「通常のメッセージによるキーボード押下検出」ではできないことができてしまうんです。

 

 - 未分類