1

Windows8なX220tでRawInputControlTestを動かす

Windows8にしてから動かなくなっている事に気づいていましたが、
小型BlueToothキーボードの活躍により利用する事がなくなっていたため調査せずスルーしていました。

しかし小型とはいえちょっとした作業をする場合にも持ち歩くのはちょっと面倒ですね。
よってRawInputControlTestにもまだ活躍の機会はありそうです。
という訳で腰痛を労わりつつ調査し、どうにか動くようになったので成果をここに上げておきます。

前回の記事ではタッチ座標の取得がうまくいっていなかったので修正しましたが、
今回はタッチされたかどうかの値の取得が上手くいっていませんでした。
そこで以下の部分を修正しています。

433行目
raw_stat := NumGet(RawInputData, RAWINPUTHEADER_Size + 8 + 1, "UChar") – 127

変更後
raw_stat := NumGet(RawInputData, RAWINPUTHEADER_Size + 8 + 3, "UChar")

少々やっつけな対応です。
タッチされていた場合0より大きな値が返り、
タッチされていない場合0が返ります。

元々どんなデータを受け取る前提なのかいまいち分かっていないので、
この対応は多分あまりいい方法じゃないと思います。

さらに、このままでは取得する値の結果が想定と違うので、
この修正に次いで以下の二か所も修正する必要があります。


455行目
ProcRawInput(wParam, lParam, msg, hwnd)

変更後
ProcRawInput(0, lParam, msg, hwnd)

463行目
ProcRawInput(wParam, lParam, msg, hwnd)

変更後
ProcRawInput(1, lParam, msg, hwnd)

本来は可変値ですが定数に置き換えます。
ProcRawInput関数内でタッチ番号などの判定に使われており、
この修正ではタッチ番号は常に1になります。
ただ、指一本でタッチする分にはなんら問題はないと思われるのでその辺はスルーしました。

※追記
ちょっと問題があったのでこっちの修正に変更です。
この場合一行だけの修正で済むので健全でもあります。

433行目
raw_stat := NumGet(RawInputData, RAWINPUTHEADER_Size + 8 + 1, "UChar") – 127

修正後
raw_stat := NumGet(RawInputData, RAWINPUTHEADER_Size + 8 + 3, "UChar") == 0

以上で動作するはずです。
タッチ位置の修正に関しては別記事を参照してください。

1

フィード

キーワード検索

最近の記事

最近のコメント

最近のトラックバック

カテゴリ

アーカイブ

ランキング