だばだばとソース書いたり文書書いたりしていると、いつのまにか入力文字列がカタカナになってしまっているすることがあります。
わずらわしいなーなんでかなーと思ったら、どうもスペース打ったりしている時に無変換キーやらカタカナキーやらに触ってしまっていることが判明。
私はカタカナ入力する際にはひらがなで読みを入れてからF7とかF8とかでカナに変換しているので、これらのキーは思いっきり無用の長物なんですね。
つことで私の作業マシンには窓使いの憂鬱を導入し、
| キー | 機能 |
| 無変換 | Delete |
| 変換 | Home |
| カタカナ | End |
と割り付けて使っていたのでした。特に無変換Deleteキーはもー超重宝。
ところがどっこい。Vistaでは「窓使いの憂鬱」はまともに動かんわけです。
IE7が"internet explorer has stopped working"とか言って起動されなくなったり、画面の再描画が異様に遅くなったりしてしまうわけです。
しかたがないのでVistaではデフォルトのキー状態でだばだば打っていたわけですが、ついつい「無変換Delete」キーを押してカタカナモードに突入してしまうわけです。変にカスタマイズすると後が大変って見本のような状態に。
そこで、なんとかVistaのキー割り付けを変更することはできないかと調べてみました。
結論。レジストリ直いじりでなんとかイケます。
[Scancode Map]ってバイナリ項目にキーボードのキーと、それに割り付けたいキーを指定してやればいいんですね。
でまず、[Scancode Map]ではキーをスキャンコードで指定しますので、希望するキーのコードを調べてみました。
参考資料はマイクロソフト社のUSBHID to PS/2 Scan Code Translation Table、この表のPS/2キーボードのSet1の16進コードがスキャンコードです。
| キー | スキャンコード |
| 無変換 | 007B |
| 変換 | 0079 |
| カタカナ | 0070 |
| Delete | E053 |
| Home | E047 |
| End | E04F |
私はUSBキーボードでHIDドライバなんですけど、PS/2 Set1のコードで効きます。これはキーボードの種類に関わらず共通みたいです。HIDドライバで置換してくれているだけなのかもしれませんけど。
で、[Scancode Map]は4バイト単位の構成になっていまして、
| 1~4 | ヘッダ(オール00) |
| 5~8 |
| 9~12 | 項目数(割り付け指定+ターミネータの数) |
| 13~16 | 割り付け(1) |
| 17~20 | 割り付け(2) |
| … |
| X~X+4 | ターミネータ(オール00) |
例えばひとつめの割り付けを「無変換キーをDelete機能にしたい」のであれば、リトルエンディアン(下位バイトが先に来る)で機能→元キーの順で記述して、
53 E0 7B 00
となります。
同様に「変換→Home」「カタカナ→End」も作ると合計3項目、+ターミネータで項目数は「4」、これを4バイト・リトルエンディアンで「04 00 00 00」と記述してヘッダ(8バイトの00)を先頭に付けると、全体で
ヘッダ:00 00 00 00 00 00 00 00
項目数:04 00 00 00
割付1 :53 E0 7B 00
割付2 :47 E0 79 00
割付3 :4F E0 70 00
ターミ:00 00 00 00
となります。
これをレジストリエディタとかで[Scancode Map]バイナリとして突っ込んで再起動かければOKOK。
マシン共通で設定変更してやる場合は、
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,04,00,00,00,53,e0,7b,00,\
47,e0,79,00,4f,e0,70,00,00,00,00,00
特定のユーザの時だけ変更したいのであれば、
[HKEY_CURRENT_USER\Keyboard Layout] "Scancode Map"
=hex:00,00,00,00,00,00,00,00,04,00,00,00,53,e0,7b,00,\
47,e0,79,00,4f,e0,70,00,00,00,00,00
でOKOK。
ただし特定ユーザ設定の場合は後勝ちになりますので、複数のユーザがログオンすると最後にログオンしたユーザの設定が全ユーザに対して有効になります。設定がなければ全ユーザがデフォルト割り付けに戻ります。
このへんがユーザ別設定の限界かなーと。
2006.12.30 追記:
どうもスリープ→復帰、でもキー割り付けが初期値に戻ってしまうような。うーんなかなか理由がよくわからない制限事項があるなあ。
参考:
キーボード配列をWindows上で変更する
「備忘録」の社会復帰