2010-04 << 2010-05 >> 2010-06

2010-05-05 (水)

*USBキーボード…

5/2に作ったやつをキーボードとして振舞うようにする.HIDのキーボードは作ったことがあるので,そのソフトを少しいじる.

とりあえず,PCに挿すとメモ帳を起動して,文字を入力したりできるように.

日本語入力をどうするか

IMEを使えば日本語らしきものが入力できますが,画面上に表示されている情報が得られないので漢字変換は絶望的です.IME限定なら文字でコード入力するという手もありますが,キーバインドが変更されていたりATOKではどうなのかとか色々面倒くさい.

というわけで,最初に日本語入力用のWSHのスクリプトを作成してテンポラリディレクトリに保存して実行するように.バックグラウンドで動かしておいてクリップボード経由でURLエンコードされた文字列を渡して好きな文字を入力できるようにする.

クリップボードへのアクセスはIEを使うしかないようなので,IEのインスタンスを作成してIE経由で.困ったことに,デフォルトの設定だとセキュリティの警告が出る.ダイアログのボタンを押さなければいけないので,そのためのスクリプトをもうひとつ走らせることに.

…ただ,日本語を入力したかっただけなんですが.画面が見えていないというのは不便です.

キーボードとスクリプトの同期

キーボードなので基本的に,決められたとおりのキーを入力するだけです.が,上記の通りPC側で色々やっている都合上,同期を取らないと心配です.最悪,長めのウエイトを入れるのもありですが,キーボードにはLEDがあります.

USBキーボードのLEDはOS側で管理することになっています.PCに複数のキーボードをつないで1つのキーボードでCapsLockすると他のキーボードのCapsLockもONになるはずです.

CapsLockの状態はwshのSendKeysで変更可能なので,これを使ってキーボードの同期を取ることにします.

ScrollLockとかの方が他に影響しなくて良さそうですが何でも良いです.

キーボードとしての機能さえ実装すれば,PC上に特別なソフトが無くても,USBデバイス間での通信が実現できますね.用途が分かりませんが.

HIDディスクリプタを書く

いままで使っていたディスクリプタにLEDの定義が無かったので書き直す.当初,一部のキー(具体的にはCTRL+ALT+DEL)だけ使えれば良いと思って最低限の中身しか書いてませんでした.USB-IFにはサンプルのディスクリプタがありますが,いままでのコードをそのまま使いたいのと,冗長でメモリがもったいないので手で書きます.本当は,サンプルどおりでないと起動時のBIOSに認識されないかもですが,まともなドライバが載ったOSなら問題ないはず.