2016-05-11 7 views
0

現在、DirectInputを使用しているアプリケーションを、代わりにRawInputを使用するように変換しています。RawInput RAWKEYBOARD構造体をDirectInput DIK_定数に変換するにはどうすればよいですか?

残念ながら、RawInputはDirectInputの後継として推奨されていますが、DirectInputとまったく同じ方法でキーボードデータを提供するようには見えません。

DirectInputは、DIK_*の定数(DIK_A,DIK_RETURNなど)を使用して、キーボードの特定の物理キーを定義します。これらのキーはキーボードのハードウェア全体で一貫していますが、はキーボードのレイアウトによって異なります。 (たとえば、DIK_Qは、Qキーが標準US-English QWERTYキーボードの物理的な場所にあるキーを指します)。私の場合は、これが望ましい動作です。

RawInputのRAWKEYBOARD構造体は、MakeCodeVKeyの両方を提供します。 VKeyを使用することはできません。これは、キーボードレイアウトによって変更されるためです。

しかし、MakeCodeは、DIK_*の定数と1:1に対応していません。特に、左と右のCtrlキーとAltキー、または他のキーからのほとんどの数字キーを区別しません。

私の質問は次のとおりです。定数を把握するには、RAWKEYBOARD構造体の内容を使用することはできますか?そして、MakeCodeがそのことを理解することの一部であると仮定すると、MakeCodeは、キーボードハードウェア全体で一定であることに頼ることができます。同じ方法で、DIK_*の定数はありますか?

+0

Windowsデスクトップアプリケーションのキーボードデータを取得する最も良い方法は、Windowsメッセージを使用することです。 RAW入力は相対的なマウスの動きに便利ですが、それはそれです。これを行う例については、[キーボード](https://github.com/Microsoft/DirectXTK/blob/master/Src/Keyboard.cpp)と[マウス](https://github.com/Microsoft/DirectXTK/)を参照してください。 blob/master/Src/Mouse.cpp)_DirectXツールキット_ –

+0

@ChuckWalbourn私が間違っていれば修正しますが、RawInputが使用するのと同じ仮想キーを使用しているようです。 –

+0

私は、XNA Game Studioが行った「キーボード」の実装に仮想キーを使用します。はい、レイアウトは変わりますが、一般的に言えば、多国語キーボードの唯一の解決策は、いくつかの異なるレイアウトオプションや設定メニューの再設定です(これは[wiki](https://github.com/Microsoft/DirectXTK/wiki/Keyboard#international-layouts))。 –

答えて

0

私は100%を確認してください、これはすべてのキーボードのハードウェア間で信頼性があるが、私が押された実際の物理的なキーを決定するためにRAWKEYBOARDMakeCodeFlags(特にRI_KEY_E0RI_KEY_E1フラグ)フィールドを使用することができると思わないんだけどこれをDIK_定数にマップします。私はthis tableを使って個々のキーのメイク/スキャンコードの大部分を決定し、残りのキーのスキャン/メイクコードとフラグを調べる実験を行った。

私はこれを4種類のキーボードでテストしましたが、2つのUSBキーボード、PS/2キーボード、およびBootcampを実行しているMacbookに内蔵キーボードがあります。

メイクコードとフラグをすべてのキーボードで一貫性を持たせることができるという文書化された確認がありますが、これまでのところうまくいきました。

関連する問題