「;=ん」が非常に気に入ったので

名前を与えておこうと思う。
きゅうり配列に似ているので、"Armoise"と呼ぼう。


AutoHotkeyでArmoiseを実装すると、次のようになります。


動かなかったのを修正しました
こちらに新しいテスト版があります。

; 下駄配列スクリプトより拝借
; 48バイトを確保して初期化しておく
VarSetCapacity(stGTI, 48)
DllCall("RtlFillMemory", "UInt", &stGTI, "UInt", 48, "UChar", 0)
DllCall("RtlFillMemory", "UInt", &stGTI, "UInt", 1, "UChar", 48)

IME_IfRomaKana()
{
	global stGTI

	; フォアグラウンドスレッドの情報を取得
	if( !DllCall("GetGUIThreadInfo", Uint,0, Uint, &stGTI) )
	{
	    Return 0
	}
	; メニュー選択中なら帰る(このチェックは今ひとつ頼りにならない?)
	if( *(&stGTI+4) & 0x1E ){
		Return 0
	}
	; hwndFocus をとりだす
	hWnd:=*(&stGTI+15)<<24 | *(&stGTI+14)<<16 | *(&stGTI+12) | *(&stGTI+13)<<8

	; IME にメッセージを送って変換モードを教えてもらう
	; IMC_GETOPENSTATUS=5, IMC_GETCONVERSIONMODE=1
	hImeWnd:=DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hWnd, Uint)

	DetectSave := A_DetectHiddenWindows
	DetectHiddenWindows,ON

	SendMessage 0x283, 0x005,"",,ahk_id %hImeWnd%
    if( ErrorLevel )
	{
		SendMessage 0x283, 0x001,"",,ahk_id %hImeWnd%
		if( ErrorLevel==0x19)
		{
			DetectHiddenWindows,%DetectSave%
			Return 1
		}
	}
	DetectHiddenWindows,%DetectSave%
	Return 0
}


$sc027::
	If IME_IfRomaKana() == 1
	{
		Send, nn
	}
	else
	{
		Send, `;
	}
return