Top > Programmingとか > Office > 2007

(16) IME2007ですぜご主人様 (4)

「とにかく対処法だけ知りたい」って方用に、まず。

IME2007のキー設定をカスタマイズしても、半角/全角キー単独でのIME On/Off機能を有効にする方法

1.IME2007ZenHanActive.regをダウンロードし、保存します。
2. 自由気ままにキー設定を変更します。
3. [キー設定]を「ユーザー定義」で確定します。
4. [キー設定]を「Microsoft IME」で確定します。
5. 1.で保存したIME2007ZenHanActive.regを実行します。
6. もう一度[キー設定]を「ユーザー定義」で確定します。

これでOK。


えー、前回IME2007ですぜご主人様(2)で、

結局、どこが悪さをして半角/全角キーが効かなくなるのかはわかりませんでしたが

とか言いながら、「IME2007のキー設定をカスタマイズしても、半角/全角キー単独でのIME On/Off機能を有効にする」というのを無理やり当てずっぽう的な手作業でやってみたわけです。

しかしやはりこれはかなりエラい手間がかかってしまいますし、非常にミスりやすいリスキーな手法でして、私としてはなんだか大変くやしいわけです。むしろ負けたような気さえしています。

ということで、もう少し楽ちんに何とかできる方法を模索すべく、IME2007のStyleListレジストリとがっぷり四つに組み合ってみることにしました。


ってもStyleList以下の値は全部Hex(16進)データ。どーしたもんかなーとぼんやりエクスポートしたファイルをテキストエディタで表示してにらんでいたわけです。

ちなみに。
レジストリエディタでは、左ペインに表示されるフォルダみたいな奴のことを「キー」と呼びます。右ペインに表示される個々の設定項目は「値」と呼ぶんですね。で、その値に書き込む情報を「データ」と呼びます。
なんとなく設定項目を指して「キー」と呼びたくなっちゃうのでややこしいですが、本稿ではこれに倣い「キー」「値」「データ」で呼び分けていきますので、そこんとこよろしくお願いします。

ついでに。
今回正確な表現を心がけようとするとエラい長ったらしい言い回しが多く、自分で書いてていやになってしまったので。
半角/全角キー 半角/全角キー単独でのIME On/Off機能
IMEダイアログ 「Microsoft Office IME 2007のプロパティ」ダイアログ
詳細ダイアログ 「Microsoft IME詳細プロパティ」ダイアログ
と呼ぶことにさせてください。そこんとこもよろしくお願いします。

で、にらんでいる先はとりあえず[key]値なわけですが。

"key"=hex:45,73,63,3d,38,30,20,34,44,20,31,46,20,33,36,20,30,46,20,30,45,00,43,\
  74,72,6c,2b,5a,3d,38,30,20,34,44,20,31,46,20,31,46,20,30,46,20,30,45,00,54,\
  41,42,3d,38,30,20,44,32,20,38,30,20,38,41,20,38,30,20,38,30,00,53,68,69,66,\
  74,2b,54,41,42,3d,38,30,20,46,45,20,46,45,20,46,45,20,46,45,20,46,45,00,53,\
  …

まぁ頭の「"key"=hex:」はお約束というか枕詞というかなので、データの中身を調べる分には関係ないですよね。

45,73,63,3d,38,30,20,34,44,20,31,46,20,33,36,20,30,46,20,30,45,00,43,\
  74,72,6c,2b,5a,3d,38,30,20,34,44,20,31,46,20,31,46,20,30,46,20,30,45,00,54,\
  41,42,3d,38,30,20,44,32,20,38,30,20,38,41,20,38,30,20,38,30,00,53,68,69,66,\
  74,2b,54,41,42,3d,38,30,20,46,45,20,46,45,20,46,45,20,46,45,20,46,45,00,53,\
  …

各行頭のスペースと末尾の[\]は、長いデータをエクスポートする際に改行段下げして見やすくするために付加されているだけですので、こいつも無視できます。

45,73,63,3d,38,30,20,34,44,20,31,46,20,33,36,20,30,46,20,30,45,00,43,
74,72,6c,2b,5a,3d,38,30,20,34,44,20,31,46,20,31,46,20,30,46,20,30,45,00,54,
41,42,3d,38,30,20,44,32,20,38,30,20,38,41,20,38,30,20,38,30,00,53,68,69,66,
74,2b,54,41,42,3d,38,30,20,46,45,20,46,45,20,46,45,20,46,45,20,46,45,00,53,
  …

複数の情報がひとつの項目内にバイナリデータでまとめられる場合は、各情報間の区切りは[00]です。ので、情報単位で区切ってみると、

45,73,63,3d,38,30,20,34,44,20,31,46,20,33,36,20,30,46,20,30,45
43,74,72,6c,2b,5a,3d,38,30,20,34,44,20,31,46,20,31,46,20,30,46,20,30,45
54,41,42,3d,38,30,20,44,32,20,38,30,20,38,41,20,38,30,20,38,30
53,68,69,66,74,2b,54,41,42,3d,38,30,20,46,45,20,46,45,20,46,45,20,46,45,20,46,45
  …

とりあえずセオリーで機械的にできるのはここまでかあ。

で、各行の後半をじーっと見ていると、なんだか3バイトごとに[20]が来てますね。
そう思って見直してみると、後ろに[xx][xx][20]の組み合わせが6つ、その前に必ず[3d]が来ていることがわかります。

6つ、ってのは、たぶん詳細ダイアログで設定できる、「* キー」ごとの状態ごとの設定値なのではないかしらと推測。
そういえば前回の手作業でも、キー設定カスタマイズを直接反映させるために書き換えたのはいずれも[20]の1~2バイト手前だったよなー。

てことは、[3d]より手前はどのキーの組み合わせに対する設定値なのかを特定する情報なんかなーと。

45,73,63 38,30 34,44 31,46 33,36 30,46 30,45
43,74,72,6c,2b,5a 38,30 34,44 31,46 31,46 30,46 30,45
54,41,42 38,30 44,32 38,30 38,41 38,30 38,30
 53,68,69,66,74,2b,54,41,42 38,30 46,45 46,45 46,45 46,45 46,45
   …

おお、なんかそれっぽいぞ。

さて、右側の機能コード([20]の前の2バイト)はちょっと後回しにするとして、キーの組み合わせを示す(はずの)左側のコードの意味がわからないなー。

ShiftとCtrlのありなし、キーボードのキーコードくらいの組み合わせになるはずなんですが、ScanCode表(キー割り付けで紹介したことがあります)に照らし合わせても全然関係が見えてきませんし。

って、あれっ?これってアスキーコードじゃん!
[45][73][63]→[E][s][c]→「Esc」じゃん!

…うわー。なんという。

ここまでわかれば、推測の方向は見えてきます。
基本的に[3d]から右側は文字コード、漢字等多バイトコードはShiftJIS(てことは2バイト固定)。
実際に文字列変換してみてわかったんですが、同じ機能の組み合わせを持つ複数の「* キーでのキーの組み合わせ」は、ひとつの機能セットにまとめられ、[20](スペース)で区切られます。

このへん、軽くまとめるとこんな感じで。

あとは「* キー」ごとの機能コードを詳細ダイアログで実際に設定されている機能と見比べれば、どの機能コードがどの機能を指しているかがわかるはず。

このへんは手作業でやると死んでしまうので、レジストリデータを引っぱり出して機能一覧として表示するビューアを作ってみました。


ImeKeyBinding.zip

起動すると、StyleListキーに格納されているサブキー(キー設定)の一覧が[キー設定]リストボックスに表示されます。ついでにその下に、起動時点で設定されているキー設定も表示されます。
あとは[キー設定]、[値表示]、[対象key]のいずれかをクリックすると、その組み合わせで設定データが一覧表示されるというスンポー。

一応詳細ダイアログで機能コード→機能名は洗い出して表示するようにしましたが、同じ機能名表示でも状態や何やらで複数のコードが割り当っているようですので、[値表示]チェックのOn/Offで機能名/機能コードを表示し分けるようにしてみました。
[対象key](レジストリとしての「キー」ではなく、「key」「Sxkey」と名付けられた各値のことです。あーややこしい)で指定できる値の機能コードは詳細ダイアログで表示されるものとは違うみたいで、比較して裏を取ることができなかったので、あえてコード表示のみにしています。また「Sxkey」はキー設定によってあったりなかったりしますので、選択してもなにも表示されない場合は、その値がないんだと思ってください。

拙いソースも込みですが、使いたいだけの方はアーカイブルートのEXEを直実行でイケます。ただし.NET Framework2.0必須です(Vistaな方は標準で組み込まれていますので意識する必要はありません)。

で、フォーマットがだいたいわかった→ビューアで中身を追っかける環境も整った、として。

では、「どこが悪さをしているのか」をあぶりだしてみることにします。

まず、準備。

  1. 「Microsoft IME」のレジストリデータをエクスポート、ファイルとして入手。
    具体的には[HKEY_CURRENT_USER\Software\Microsoft\IMEJP\12.0\StyleList\NATURAL]以下。
  2. 「ユーザー定義」のレジストリデータをエクスポート、ファイルとして入手。
    具体的には[HKEY_CURRENT_USER\Software\Microsoft\IMEJP\12.0\StyleList\Custom]以下。
  3. 上記2つのファイルに「読み取り専用」属性を付加。
    作業が失敗した時に元に戻せるように。でも以下の作業で中身を参照したりコピー&ペーストしたりするので、間違って変更しちゃわないように。

準備ができたら、実際に調査作業をやってみることにします。

  1. 「Microsoft IME」レジストリファイルから「ユーザー定義」登録用のレジストリファイルを作成。
    1. 「Microsoft IME」レジストリファイルを別名でコピー。
    2. その中の[HKEY_CURRENT_USER\Software\Microsoft\IMEJP\12.0\StyleList\NATURAL]を[HKEY_CURRENT_USER\Software\Microsoft\IMEJP\12.0\StyleList\Custom]に書き換え。
    3. defRoma値とDisplayName値を削除しておきます。
  2. 「ユーザー定義」レジストリキーを削除。
    レジストリエディタの左ペインから[HKEY_CURRENT_USER\Software\Microsoft\IMEJP\12.0\StyleList\Custom]を右クリック→[削除]で。
  3. 1.で作った「ユーザー定義」登録用レジストリファイルを実行。
    レジストリエディタで、[HKEY_CURRENT_USER\Software\Microsoft\IMEJP\12.0\StyleList\Custom]が再度出来上がっていることを確認します。表示されない場合は、F5キーで最新の情報に更新できます。

ここまでで、「Microsoft IME」とまったく同じ「ユーザー定義」レジストリデータができあがります。
念のため、ここでキー設定を「ユーザー定義」に切り替えて、ほんとに半角/全角キー単独でのIME On/Offが効くかどうかを確認。おお、効く効く。

  1. 「Microsoft IME」レジストリデータに存在して「ユーザー定義」レジストリデータに存在しない値を1つずつ削除して動作確認。
    私の環境では、S8key、SAkey、SBkey、SCkey、SEkeyが「Microsoft IME」レジストリデータだけに存在してました。
  2. 「ユーザー定義」レジストリファイルの値をひとつずつ、レジストリに上書きして動作確認。
    1. IMEダイアログの[キー設定]を「Microsoft IME」あたりに変更して[適用]。
    2. 「ユーザー定義」レジストリファイルから値をひとつ切り出して別ファイル(拡張子を.regとして)に保存して実行。
    3. IMEダイアログの[キー設定]を「ユーザー定義」に変更して再度[適用]。
    4. テイストエディタ等をアクティブにして半角/全角キーが効くかどうかを確認。
    5. うへぇめんどくさい。

→S4keyを差し替えた途端に半角/全角キーが効かなくなりました!

こ こ か っ。

で、S4keyの中身をビューアで確認。

「半角/全角キーの効く」キー設定(「Microsoft IME」「IME Standard」「ATOK」の3つ。「VJE」と「WX」には単独設定がもともとありません)ではいずれも「半角/全角」が[4345][3030][3030][3030][3030][3030]なのに対し、「ユーザー定義」では[4344][3030][3030][3030][3030][3030]となっていました。

念のため、レジストリエディタで直接[4344]→[4345]に変更、IMEダイアログの[キー設定]を「Microsoft IME」あたりに変更して[適用]→「ユーザー定義」に変更して再度[適用]、改めて半角/全角キーの動作確認、と。

おおお半角/全角キー復活!


というわけで、S4key値を1バイト修正かければ、半角/全角キーが復活するということがわかりました。

いちいちレジストリエディタで書き換えるのも面倒なので、S4keyだけ切り出したレジストリファイルを用意してみました。(リンクは本稿のトップにあります。)

キー設定を自由に変更してからこのファイルを実行すると、変更されたキー設定はそのままに、半角/全角キーが有効になります。

あ、ただし。
このレジストリファイルは万能ではなく、ATOKをベースとしたキーカスタマイズ時にはおかしな動作になるかもしれません。ので、もしそんなケースがあったらご一報ください。

あー疲れた。

トラックバック

このエントリーのトラックバックURL:
http://salv.miscnotes.com/mt/mt-tb.cgi/638

コメント

こんばんは。
解明してしまうとは恐れ入りました!
私にはそこまでのスキルも根気もありません・・・(^-^;)

すみません、適用させる手順で質問です。

> 3. [キー設定]を「ユーザー定義」で確定します。
> 4. [キー設定]を「Microsoft IME」で確定します。

これはキー設定を1回戻してからレジストリファイルを実行するということでしょうか?
「ユーザー定義」のまま実行してはいけないのですか?

がんばってみましたー(^^;)

> いけないのですか?

別にかまわないと思いますが、ポイントはそこではなく。
半角/全角キーを有効にするには、書き換えたレジストリをIME2007に読み込ませてやる必要があるんですね。

IME2007がキー設定回りのレジストリを読み込むタイミングは、起動時と、キー設定の選択を変更した[OK]または[適用]ボタンをクリックした時です。

ですから、キー設定の変更を一度「ユーザー設定」以外にし、もう一度「ユーザー設定」にすることで、書き換えたレジストリをIME2007に読み込ませてやってくださいねーということなんですね。

要はレジストリの再読み込みをさせればいいわけですから、3→5→4→6でも3→4→5→6でもいいです。面倒でなければ、レジストリ書き換え後にOS再起動でもいいです。

お試しください。

おはようございます。

> IME2007がキー設定回りのレジストリを読み込むタイミングは、起動時と、キー設定の選択を変更した[OK]または[適用]ボタンをクリックした時です。

なるほど。回答ありがとうございました。おかげさまで無事「半角/全角キー」が使用できるようになりました!

大変お世話になりました m(_ _)m

ありがとうございました。レジストリ適用後無事オンオフが復活しました瞬間、神だと思いました。
自分はVista標準のIMEで苦しみました。
ちなみに、バージョンとしては10.0みたいなのでここのレジストリファイルを書き換えないといけません。
一応掲載しとくと(と言っても簡単ですが)

[HKEY_CURRENT_USER\Software\Microsoft\IMEJP\12.0\StyleList\Custom]

 の行を

[HKEY_CURRENT_USER\Software\Microsoft\IMEJP\10.0\StyleList\Custom]

にすればよいです。バージョンの記載の部分ですね。誰かがまた救われれば…。
なかなか有益な情報がなくサマヨッタ挙句ここにたどり着けましたが、こういった場面の検索ヒットがイマイチ自分の思ったものにマッチしないのにガッカリしてました。
助かりました~!

ぼくも困っていました。
解明してくれてありがとう!!

コメントを投稿