IMEの切り替えを確実にする

From Usipedia
Jump to: navigation, search

Contents

従来の方法

IME制御関数(018移植) +SandS スクリプトを利用すれば C-l でIMEオフ,C-j でIMEオンという動作が出来るようになります.

必要な部分だけ抜き出したスクリプト

 $^j::
   WinGetTitle, t, A
   WinGet, hWnd, ID, %t%
   dc := DllCall("imm32¥ImmGetDefaultIMEWnd", Uint, hWnd, Uint)
   DetectSave := A_DetectHiddenWindows
   DetectHiddenWindows,ON
 
   SendMessage 0x283, 0x006, 1, , ahk_id %dc%
   SendMessage 0x283, 0x002, 25, , ahk_id %dc%
   SendMessage 0x283, 0x004, 8, , ahk_id %dc%
 
   if (DetectSave <> A_DetectHiddenWindows)
     DetectHiddenWindows,%DetectSave%
 
   return
 
 $^l::
   WinGetTitle, t, A
   WinGet, hWnd, ID, %t%
   dc := DllCall("imm32¥ImmGetDefaultIMEWnd", Uint, hWnd, Uint)
   DetectSave := A_DetectHiddenWindows
   DetectHiddenWindows,ON
 
   SendMessage 0x283, 0x006, 0, , ahk_id %dc%
 
   if (DetectSave <> A_DetectHiddenWindows)
     DetectHiddenWindows,%DetectSave%
 
   return

けどこのスクリプト,Office系のソフトや Windows Live Messenger で使うと頻繁にIMEが無効になり元に戻せなくなるという不具合があります. 原因を全く特定できないので嫌々使っていたのですが,簡単な解決方法が分かりました. それが次の方法です

新しい方法

IMEの設定でIMEオン/オフそれぞれに適当なキーを割り当ててそれをAHKから呼ぶ. 単純明快なだけ動作も確実です.

設定

IME 2007 のプロパティ > 全般 > キー設定 > 変更 > 詳細プロパティ
半角/全角キーに「IME-オフ」を、無変換キーに「IME-オン」を割り合てる。

スクリプト

 $^j::
   Send,{vk1Csc079} ; 変換キー
   Return
 $^l::
   Send,{vkF3sc029} ; 半角/全角キー
   Return
Namespaces
Variants
Views
Actions
Categories