現在、DirectInputを使用しているアプリケーションを、代わりにRawInputを使用するように変換しています。RawInput RAWKEYBOARD構造体をDirectInput DIK_定数に変換するにはどうすればよいですか?
残念ながら、RawInputはDirectInputの後継として推奨されていますが、DirectInputとまったく同じ方法でキーボードデータを提供するようには見えません。
DirectInputは、DIK_*
の定数(DIK_A
,DIK_RETURN
など)を使用して、キーボードの特定の物理キーを定義します。これらのキーはキーボードのハードウェア全体で一貫していますが、はキーボードのレイアウトによって異なります。 (たとえば、DIK_Q
は、Qキーが標準US-English QWERTYキーボードの物理的な場所にあるキーを指します)。私の場合は、これが望ましい動作です。
RawInputのRAWKEYBOARD
構造体は、MakeCode
とVKey
の両方を提供します。 VKey
を使用することはできません。これは、キーボードレイアウトによって変更されるためです。
しかし、MakeCode
は、DIK_*
の定数と1:1に対応していません。特に、左と右のCtrlキーとAltキー、または他のキーからのほとんどの数字キーを区別しません。
私の質問は次のとおりです。定数を把握するには、RAWKEYBOARD
構造体の内容を使用することはできますか?そして、MakeCode
がそのことを理解することの一部であると仮定すると、MakeCode
は、キーボードハードウェア全体で一定であることに頼ることができます。同じ方法で、DIK_*
の定数はありますか?
Windowsデスクトップアプリケーションのキーボードデータを取得する最も良い方法は、Windowsメッセージを使用することです。 RAW入力は相対的なマウスの動きに便利ですが、それはそれです。これを行う例については、[キーボード](https://github.com/Microsoft/DirectXTK/blob/master/Src/Keyboard.cpp)と[マウス](https://github.com/Microsoft/DirectXTK/)を参照してください。 blob/master/Src/Mouse.cpp)_DirectXツールキット_ –
@ChuckWalbourn私が間違っていれば修正しますが、RawInputが使用するのと同じ仮想キーを使用しているようです。 –
私は、XNA Game Studioが行った「キーボード」の実装に仮想キーを使用します。はい、レイアウトは変わりますが、一般的に言えば、多国語キーボードの唯一の解決策は、いくつかの異なるレイアウトオプションや設定メニューの再設定です(これは[wiki](https://github.com/Microsoft/DirectXTK/wiki/Keyboard#international-layouts))。 –