AutoHotkeyでIMEの切り替えをする方法

こんにちは、低い低気圧のせいで頭痛が痛い生焼けです。

今回はAutoHotkeyやMouseGestureL.ahkで半角英数/日本語の切り替えを簡単に出来る方法をご紹介します。

スポンサーリンク

何が便利なの?

1.日本語入力を確実にしたい時

ショートカットキーを使った後に文章を入力する際など、確定で日本語入力になってくれたほうが嬉しいときに重宝します。

例えば、検索ボックスにカーソルを移動させるショートカットキーを使ったとして、

半角英数で入力したことに気づく→文字削除→日本語に切り替える

とかしていてはショートカットの意味が薄れますね。

橋か箸か

2.ショートカットキーがうまく動作しない時

よく、日本語入力の状態だとショートカットキーがうまく動作しないときがあります。

日本語入力になっていると、例えばIllustratorのツール切り替え時に使う“a”などの文字単体や、Shift+Tなどが文字入力として扱われてしまいます

日本語入力モードで”a”と”T”を入力した状態

マウスジェスチャとかに割り当てる場合、折角激速でツール切り替えができてもこれで邪魔されてはかないません。

これらを解決してくれるのが今日ご紹介する方法です。

準備

参考サイト

IME制御 - eamat @Cabinet
- IME制御用 関数群 (IME.ahk) AutoHotkey上で日本語入力の制御を可能にするための関数群、IMM32 API使用 AutoHotkey_L (A32/U32/U64)に対応しまし...

こちらのサイトのスクリプトを参考にしました。(改変・再配布などご自由にとのことです。)

基本的にIMEのONOFFしか使わないので”IME_SET”の関数だけお借りしました。

ほかにもIMEの状態を取得する関数など色々あるので、使いたい方は上のサイトの「 IME20121110.zip」をDLして「IME.ahk」の中身から目的の関数をコピーして同じ方法でやれば使えると思います。

これをスクリプトの一番上に貼り付けるだけ!

下のコードをいつも使うスクリプトの一番上に貼り付けるだけです。簡単。

IME_SET(SetSts, WinTitle="A")    {
	ControlGet,hwnd,HWND,,,%WinTitle%
	if	(WinActive(WinTitle))	{
		ptrSize := !A_PtrSize ? 4 : A_PtrSize
	    VarSetCapacity(stGTI, cbSize:=4+4+(PtrSize*6)+16, 0)
	    NumPut(cbSize, stGTI,  0, "UInt")   ;	DWORD   cbSize;
		hwnd := DllCall("GetGUIThreadInfo", Uint,0, Uint,&stGTI)
	             ? NumGet(stGTI,8+PtrSize,"UInt") : hwnd
	}

    return DllCall("SendMessage"
          , UInt, DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hwnd)
          , UInt, 0x0283  ;Message : WM_IME_CONTROL
          ,  Int, 0x006   ;wParam  : IMC_SETOPENSTATUS
          ,  Int, SetSts) ;lParam  : 0 or 1
}

これで“Reload This Script”をすれば、使えるようになっています

MouseGestureL.ahkの場合

MouseGestureL.ahkの場合はタスクトレイのアイコンを右クリックし、「拡張スクリプト編集」を選択します。

すると、メモ帳かテキストエディタが開くので、

Goto, MG_User_End

;----- ユーザー定義サブルーチン	------------------------------------------------

を探してその下に、先程のコードを貼り付けます

これでソフトの再起動をかければ使えるようになっています

使い方

スクリプトに組み込む

下のどちらかを動作に組み込むだけでIMEの切り替えができます。

IME_SET(0)

IMEの状態に関わらずIMEをオフに、つまり半角英数入力に出来ます。

IME_SET(1)

IMEの状態に関わらずIMEをオンに、つまり日本語入力モードに出来ます。

具体例

Ctrl+Shift+Alt+Pをおすと、半角英数入力になって”a”が入力された後、日本語入力モードになって「あ」が入力されるという実用性皆無のものを作ってみます。

^+!p::
IME_SET(0)
send,a
IME_SET(1)
send,a
return

これをメモ帳で動作させると…

のようになりました。

日本語入力モードだとこのように確定にならないので、そこだけ注意してください。

MouseGestureL.ahkの例

MouseGestureL.ahkの場合もAutoHotkeyのスクリプトと同じ様に書けば大丈夫です。

例えば、検索ボックスにカーソルを移動させて、日本語入力にする場合

;検索ボックスにカーソル
send,^l
IME_SET(1)

のようになります。

これを動作させると、検索ボックスにカーソルが移動し、そのまま日本語で検索出来るようになっています。

うまく動作しない時

ソフトによってはIMEの切り替えがうまく行かないときがあります。

なぜかはわかりませんがIMEの切り替えに時間がかかり、切り替わる前に次の動作にすすんでしまうことが原因みたいです。

その場合は、IME_SET()の前後に

Sleep,300

を入れてみてください。

これは「0.3秒停止する」という意味のコマンドです。(1000=1秒)

例えば、

^+!b::
sleep,500
IME_SET(1)
sleep,300
send,a
return

とすると、Ctrl+Alt+Shift+Bを押すと0.5秒待ったあと、IMEの切り替えが行われ、また0.3秒待った後にaが押される、という感じです。

長すぎても動作がもたもたしてしまうので、色々時間を変えてちょうどよい時間を見つけてください。

まとめ

今回、AutoHotkeyやMouseGestureL.ahkでIMEの切り替えをする方法をご紹介しました。

Adobe系のソフトでよく使う、文字単体系やShift+系のショートカットをマウスジェスチャーで使う際に重宝してます。

IMEの切り替えが出来るだけで、思ったとおりに動作してくれることがだいぶ増えたのでおすすめです。

関連記事

タイトルとURLをコピーしました