2016-04-06 9 views
0

Windowsのマウスとキーボードの余分な入力を検出するための小さな証明を書いています。それは可能ですか?また、Windows APIの大量のボタンから入力を検出するにはどうすればいいですか?私が読んだところでは、5つのボタンのサポートしかありませんが、多くのマウスはそれより多くのボタンを持っています.Windows APIでも私の質問は可能です.Windowsの制約のなかで可能ですか?最大11個のマウスボタンをサポートしていますか?

答えて

2

Raw Input APIを使用して、WM_INPUTメッセージをマウス/キーボードドライバから直接受け取ることができます。 5つの標準マウスボタン(左、中央、右、x1、x2)の構造フィールドがあります。標準的なボタンのほかに、追加のボタンは、必要に応じてコーディングする必要のあるベンダー固有のデータによって処理されます。 APIを使用すると、生の値にアクセスできますが、APIの解釈方法については、ベンダーのドライバのマニュアルを参照する必要があります。場合によっては、余分なボタンがマウス入力ではなくキーボード入力として実際に報告されることがあります。

を使用してDirectInput devicesと対話し、Mouse DataKeyboard Dataを受け取ってみてください。

また、DirectInputの後継バージョンであるXInput APIを使用することもできます。ただし、XInputはDirectInputよりも制限されています.XInputは主にXbox 360コントローラとのやり取り用に設計されているため、DirectInputは他のコントローラとやり取りするように設計されています。詳細はXInput and DirectInputを参照してください。

+0

私は見るので、本当にクッキーカッターの答えはありません。私はすべてのハードウェアメーカー固有のドライバを考慮する必要があります。 – Stephen

+0

Raw Input APIを使用している場合は、はい。 DirectInputはもう少し柔軟性があり汎用性があり、最大128個のボタンを扱うことができます(ただし、一度に8つ以上のボタンを処理する方法はわかりませんが、[DIMOUSESTATE2'](https:// msdn ['IDirectInputDevice8 :: GetDeviceState()'](https://msdn.microsoft.com/)を呼び出すと、.microsoft.com/ja-ja/library/windows/desktop/microsoft.directx_sdk.reference.dimousestate2.aspx) en-us /ライブラリ/ windows/desktop/microsoft.directx_sdk.idirectinputdevice8.idirectinputdevice8.getdevicestate.aspx))。 –

0

非常にシンプル:GetKeyState

SHORT WINAPI GetKeyState(
    _In_ int nVirtKey 
); 

ロジックを使用すると、次です:

  1. は、ボタンを押していないユーザーに依頼ドロップボタン状態押され
  2. すべてのボタン0-255のための
  3. ループGetKeyState (いくつかの仮想キーは、それが押されていなくても押すことができます、理由は分かりません)
  4. は、今、あなたはすべてのユーザー
  5. でボタンを押す表示されます配列を監視し、キーからボタン
  6. を押すようにユーザーに依頼
  7. (十分にあるループ間の休止が25msの場合)キーは、残りのキーコードのスレッドを監視開始し、任意の構造に保存します

他のユーザー入力デバイスでは、直接入力と他のすべての入力が可能です。キーボードとマウスの場合 - GetKeyStateが最適です。

関連する問題