本日のアレ.20070430-20070506 - Xia's
index
アレ
マウスなしで,キーボードだけでウィンドウを操作したりとか,まぁ Windows の操作が色々と快適になるソフト「ねこぽい」.
動画 PC を構築中に,普段から必ず入れるアプリの最新版とかをダウンロードしていたら,ねこぽいが「7年ぶりにバージョンアップ」していたのを発見した.7年て.
で,機能はほとんど変更なしで,フルスクラッチで作り直されたらしいのだが.愛用していた「ESCキーと半角/全角キーを入れ替える」の機能がどうも正常に動いてないみたい.どうしてなんだぜ? そういえば以前のバージョンでは普通に有効になっていたこの機能,今度のバージョンでは「Windows 再起動後に有効」となっているし.
ってことで調べてみたら,どうも新バージョンでは単にレジストリ(\HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layout)にバイナリキー(Scancode Map)を作成してるだけのようで,キーが HKLM なので再起動が必要ですよってことらしい.ふむ.まぁ既存機能で実現できるものをわざわざ外部アプリで実装するこたーねーわな.
というわけでソレを設定したのだが,動かん.なぜだ.調査.
まずこのレジストリキーは何なの? っていうと,「スキャンコードの入れ替えについて書かれたページ」によれば,バイナリでスキャンコードを並べると Windows がそれを入れ替えてくれるというものらしい.まんまですな.
スキャンコード自体はこんな感じ.「押す」の方な.ていうか「押す」と「離す」を別々にマッピングしたらどうなるんだろ.試さないけど.
めんどい時には「Change Key」を使うと押したキーのコードを表示してくれるます.でもダウンロードしてインスコするより暗算の方が早いと思った.
で,実際に「ねこぽい」によって作られる値を見てみましょう.
のとき,
となる.
のとき,
となる.
なるほどなるほど.1D と 3A ってのが「Ctrl⇔Caps」で,01 と 29 が「ESC⇔全半」ですな.
でさっきのページによると,最初の 8バイトがヘッダ,その次がレコード数,でデータが並んで最後にターミネータ,と.ていうかレコード数あるならターミネータいらないじゃん.何これ.
でもって,ねこぽいはどちらにしても 3レコード(+ターミネータ 1レコード)を使って,設定画面のチェックボックス次第でデータを入れたり入れなかったりする,と.
いや待て,このデータが入ってない時の 00 00 00 00 って,ターミネータと同じじゃん.これが原因で,上の設定の時には 01⇔29 が効いてないんでは?
というわけで,
こうしてみた.
……あれ? 動かない? かなり勝ちを確信していたのでこれは衝撃的だ.
これでどうよ……動いたー ヽ( ´∀`)ノ
てことは,実は途中の空欄はあってもよくて,
とかでも動くんじゃね?
……ダメですよね (´・ω・)
てかこのターミネータとか何なの.取っちゃえ.
お,動いたww 途中にターミネータがあると処理を打ち切るけど,なくてもレコードが尽きればやはり処理が終了するってわけか.後者は当然っちゃ当然なんだけど,じゃ何故ターミネータなんてものが必要なのか……謎だのう ( ´ω`)
とりあえずねこぽい作者さまにメールでもすっかのー.
うちの環境は TweakUI とか EvMemo とかキーフックするものが多いんで,どこでも同じ症状とは限らないが……