IME関連のレジストリを変更後、即時適用することは可能でしょうか


げお  2010-11-02 21:59:47  No: 102654

WindowsXP Sp3, VB6.0 Sp6 環境です。

現在、プログラムにてIME関連のレジストリ値
書き換えを実施しております。
※以下問題回避のため
  http://support.microsoft.com/kb/934715/ja

プログラムで値を書き換えた後、
レジストリエディタにて確認すると、
変更した値になっているのですが、
IMEのプロパティ画面で確認すると
変更が反映されていない状態になっています。

Windowsの再ログオンを行うことで
変更が反映されることは確認できたのですが、
再ログオンなしにIMEの設定変更を適用する方法はないでしょうか。
(IMEプロパティ画面の[適用]ボタンを押下するのと同じ制御を行いたいです)

どなたかご存知の方がいらっしゃいましたら、
お教えいただけるとありがたいです。

宜しくお願い申し上げます。


げお  2010-11-05 02:18:01  No: 102655

質問者です。

SendMessageTimeOut で、送信先ウィンドウを、

1)HWND_BROADCAST
2)ImmGetDefaultIMEWnd で取得したウィンドウハンドル

に対して WM_WININICHANGE メッセージの送信を行ってみましたが
適用されませんでした。

以下にその際のソースを記載致します。

-----------------------------------------------------
■送信先:WM_BROADCAST とした場合
  Dim lngRetn As Long

  Call SendMessageTimeOut(HWND_BROADCAST,WM_WININICHANGE,0,0,SMTO_ABORTIFHUNG,5000&,lngRetn&)

■送信先:ImmGetDefaultIMEWnd の取得値とした場合
  Dim lngIME As Long
  Dim lngRetn As Long

  lngRetn& = ImmGetDefaultIMEWnd(lngIME&)

  Call SendMessageTimeOut(lngIME&,WM_WININICHANGE,0,0,SMTO_ABORTIFHUNG,5000&,lngRetn&)
-----------------------------------------------------

※定数は APIビューアから宣言を検出し、以下の通り宣言
Public Const HWND_BROADCAST = &HFFFF&
Public Const WM_WININICHANGE = &H1A
Public Const SMTO_ABORTIFHUNG = &H2

また、実際に書き込むレジストリの情報は、

Windows Vista 及び Server 2008 以降の OS 標準の IME または
Office 2007 IME を使用している環境で、
変換候補に Unicode 環境依存文字が表示されてしまうことを回避するため、

  \\HKEY_CURRENT_USER\Software\Microsoft\IMEJP\12.0\MSIME

に"EnableCodeAreaForConvert"という dword の値名を追加し、

  0000031f(10進で799)

の値を設定するというものです。

※Microsoft 文書番号:934715
  http://support.microsoft.com/kb/934715/ja

IME のプロパティウィンドウ上で上記設定を施し、
[適用]ボタンを押下することで即時適用されていましたので、
やり方はあると思うのですが、
その実現方法が解明できておりません。

IME 系の API リファレンスを読みましたが、
[適用]ボタンと同じことを行ってくれるようなものは見つかりませんでした。

どなたかご存知でしたら、教えて頂けないでしょうか。

宜しくお願い申し上げます。


げお  2010-11-05 02:19:41  No: 102656

質問者です。

Microsoft のレポートのリンクは最初の投稿で掲載済みでした。
内容が重複してしまい申し訳ございません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加