WindowsXP Sp3, VB6.0 Sp6 環境です。
現在、プログラムにてIME関連のレジストリ値
書き換えを実施しております。
※以下問題回避のため
http://support.microsoft.com/kb/934715/ja
プログラムで値を書き換えた後、
レジストリエディタにて確認すると、
変更した値になっているのですが、
IMEのプロパティ画面で確認すると
変更が反映されていない状態になっています。
Windowsの再ログオンを行うことで
変更が反映されることは確認できたのですが、
再ログオンなしにIMEの設定変更を適用する方法はないでしょうか。
(IMEプロパティ画面の[適用]ボタンを押下するのと同じ制御を行いたいです)
どなたかご存知の方がいらっしゃいましたら、
お教えいただけるとありがたいです。
宜しくお願い申し上げます。
質問者です。
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 リファレンスを読みましたが、
[適用]ボタンと同じことを行ってくれるようなものは見つかりませんでした。
どなたかご存知でしたら、教えて頂けないでしょうか。
宜しくお願い申し上げます。
質問者です。
Microsoft のレポートのリンクは最初の投稿で掲載済みでした。
内容が重複してしまい申し訳ございません。
ツイート | ![]() |