Raw inputによる複数マウス利用

WindowsのRaw input API

Windowsにおいてマウスとキーボードのリアルタイム入力を行なう方法は複数存在しますが、通常のWindowsメッセージおよびGetASyncKeyState, GetKeyState API等では、複数の入力デバイスを識別することは出来ず、全て混合された入力としてのみ受け取ることになります。

Raw input APIを利用することで、複数の入力デバイスからの入力を識別することが出来るため、マルチプレイヤーゲーム等で有用と考えられます。

使用する主なAPI

WM_INPUT
Raw inputのメッセージはWM_INPUTで受け取ります。しかし、デフォルトではこれを受け取る設定になっていないため、RegisterRawInputDevicesにて設定する必要があります。

RegisterRawInputDevices
WM_INPUTを受け取れるように設定します。

SetWindowSubclass
本来、ウィンドウメッセージを受け取るにはウィンドウプロシージャに手を入れる必要がありますが、ゲームエンジン等のフレームワークを使っている場合、ウィンドウプロシージャが隠蔽されていて手を出せない場合が多々あります。
このような場合には、ウィンドウメッセージの横取りをする必要があり、これを一般にウィンドウのサブクラス化などと呼びます。
SetWindowSubclassはWindowsXP以降で導入された比較的新しいAPIで、ウィンドウのサブクラス化を安全に行うことが出来ます。

参考資料

Raw Input (MSDN)
各々のAPI仕様を読むよりも、"Using Raw Input"を読んだほうが分かり易いです。

Raw inputによる複数マウス・キーボード利用のデモ

Raw inputを使って複数のマウス、キーボードを使用する簡単なデモを作成しました。

Raw inputによる複数HIDサンプル

RawInput.cpp, RawInput.h
Raw input入力ライブラリ本体

RawInputReceiver.h
上記ライブラリで利用するレシーバのサンプル

RawInputDemo.cpp
複数のマウスとキーボードを利用するサンプル。実際にマウスとキーボードを2台ずつ接続して実行してください。


Copyright by MUTATE Systems 2018
管理者宛メール