コックピットのスイッチ類を実際に作るのは面倒なので、タッチ液晶でボタンを押したら割り当てたキーを送信するプログラム、というのを作ってみた。
C#で、keybd_event経由で送信する。
キーの割当は、コンフィグ画面のHTMLで書き出してクリップボード経由でコピーすればTSV経由になるので、簡単な文字列処理でキーの組み合わせや名前、操作のカテゴリを解析できる。
ということで、チャチャッと作ったんだけど、どうやらDCSはkeybd_eventで入力したキーは受け付けてくれないらしい。
Winのスクリーンキーボードではある程度操作ができるのは確認できたので、うまい方法を使えば、ちゃんとDCSに送れるはずなんだけど、少なくともkeybd_eventでは不可能。
ちなみに、スクリーンキーボードを使うと、マウスカーソルがタッチした場所に移動するので、F-15のような、マウス操作を視点操作に使う機体では視点があらぬ方向に向く。Axisでマウスによる視点操作を殺せば問題ないけど、そうすると視線変更ができなくなる。
試しにSystem.Windows.Forms.SendKeys.Sendも試してみたが、こっちも反応なしだった。まぁ、こっちが動いても、特殊なキー入力とかができないので使えないわけだが。
他の方法だと、例えばマイコンのHIDでキーボードに擬態させて、そこにシリアルポートとかを経由してキーコードを送って、とか? それなら確実にハードウェアキーボード扱いになるけど、なんだかなぁ。
あとは、WinのスクリーンキーボードのhWndを取ってきて、ボタン操作を注入するとか? 手間がかかりそう。
DCSにもSimConnectみたいなAPIがあれば楽なんだけど、どうかな。無いこたぁ無いだろうけど、簡単に使えるかどうか(SimConnectが簡単ってわけじゃないが)。
さて、どうするかな。
0 件のコメント:
コメントを投稿