« マウスコントロールを実装しました その2 | トップページ | キーボードコントロールを実装しました その3 »

2014年10月27日 (月)

キーボードコントロールを実装しました その2

キーボード情報が送れるようにはなったのですが、大きな不具合が見つかりました。

エディターで大文字の"A"が出せませんヽ(´▽`)/

シフトキーの情報がうまく送れていないようです。

[MainWindow] "JP" : Press : VK_Code = "VK_SHIFT" : 10
[MainWindow] "JP" : Press : VK_Code = "VK_A" : 41
[MainWindow] "JP" : Release : VK_Code = "VK_A" : 41
[MainWindow] "JP" : Release : VK_Code = "VK_SHIFT" : 10

Brynhildrサーバさんに送っているキーの押下情報を表示させてみましたが、送っている情報の値、順序としては問題なさそうです。

仕方ないのでサンプルソース(zeroshikikai.cpp)ではどのように情報が送られているか確認してみましょう。

制御用のスレッドのキーボード用情報の設定部分(450行目あたり)にprintf文を挿入しました。
(stdio.hのインクルードも必要です)

com_data.keycode = g_keyboard1[0];
com_data.keycode_flg = g_keyboard2[0];

printf("keycode = %02x\n", com_data.keycode); // これ
printf("keycode_flg = %02x\n", com_data.keycode_flg); // これ

確認用なのでお手軽なものを使えばいいですよね。Visual Studioからデバッグ実行しても標準出力は得られないのでコマンドプロンプトを使います。リダイレクトもしくはパイプを使えば端末 or ファイルに出力できるそうなので以下のようにしました。

d:\src\zerosikikai\zerosikikai\Debug>zerosikikai.exe > run.log

結果は以下のようになりました。ffffff80となってますがintに拡張されてしまったためなのでとりあえず放っておきます。

keycode = 10
keycode_flg = ffffff80
keycode = 41
keycode_flg = ffffff80
keycode = 41
keycode_flg = 00
keycode = 10
keycode_flg = 00

動作としては、

SHIFT KEY DOWN
A KEY DOWN
A KEY UP
SHIFT KEY DOWN

なので、値、順序も問題はなさそうです。

キーの押下時の情報だけでなく実際に送られるキーボード情報をすべて確認してみた方がよさそうです。

まず、zeroshikikai.cppの場合シフトキーを押した直後からの情報を出力させてみました。

keycode = 10
keycode_flg = 80
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 41
keycode_flg = 80
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 41
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 00
keycode_flg = 00
keycode = 10
keycode_flg = 00

キー操作の情報送信の間に結構空の情報(keycode = 00 and keycode_flg = 00)が送られていますね。

Qt Brynhildr (仮称)も同様に出力させて確認してみました。押すタイミングなどの差はありますが、やはりデータの値、順序としては問題なさそうです。

なにが違うのでしょうか…謎です。

« マウスコントロールを実装しました その2 | トップページ | キーボードコントロールを実装しました その3 »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: キーボードコントロールを実装しました その2:

« マウスコントロールを実装しました その2 | トップページ | キーボードコントロールを実装しました その3 »