IMEの切り替えを確実にする
From Usipedia
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