blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

Google 日本語入力使用中に、ユニコード文字を出力する関数を作成した

最新版の Google 日本語入力では、unicode 文字を直接出力できなくなった - blechmusik2の日記の続きである。
なるほど、たしかに、WM_UNICHAR (WM_CHAR) を使用して、IME を経由せずに、『や―を出力するという方策があった。Google 日本語入力チームの湯川さん、ありがとうございます。
以下に掲載するのは、Google 日本語入力使用中にユニコード文字を出力する、AutoHotkey_L 用の関数である。ただし、以下の関数はあくまでも概要にとどまる。それは、このままの send_UNICHAR_pro_re_nata 関数では、{BS} といった文字列を出力できないからだ。実用する際には気をつけて欲しい。

;;; Google 日本語入力でユニコード文字を出力する

;;; See, 
;;; キー入力入れ替えツールなどを使うときに便利な『文字の直接投入』機能を、復活させて欲しいのですが……。 - Google 日本語入力 公式ヘルプフォーラム
;;; http://www.google.com/support/forum/p/ime/thread?tid=6e23602ee455d013&hl=ja


F10::reload

;; 常に WM_UNICHAR を使用する
F11::send_UNICHAR_at_all_times( "『(*´Д``)――(´・ω・`)ショボーン』" )

;; 必要に応じて WM_UNICHAR を使用する
F12::send_UNICHAR_pro_re_nata( "『(*´Д``)――(´・ω・`)ショボーン』" )



send_UNICHAR_at_all_times( p_str ) {
	message := "WM_UNICHAR"
	;; message := "WM_CHAR"

	Loop, Parse, p_str
	{
		send_by_way_of_%message%( get_UNICHAR( A_LoopField ) )
	}

	return False
}

send_UNICHAR_pro_re_nata( p_str ) {
	message := "WM_UNICHAR"
	;; message := "WM_CHAR"

	Loop, Parse, p_str
	{
		value := get_UNICHAR( A_LoopField )

		if ( value > 255 ) {
			send_by_way_of_%message%( value )
		} else {
			send( A_LoopField )
		}
	}

	return False
}


send( p_str ) {
	send,% p_str
	return p_str
}

get_UNICHAR( p_str ) {
	return Asc(p_str)
}

send_by_way_of_WM_UNICHAR( p_str ) {
	ControlGetFocus, control, A
	SendMessage, 0x109, %p_str%, 0, %control%, A
	return Chr(p_str)
}

send_by_way_of_WM_CHAR( p_str ) {
	ControlGetFocus, control, A
	SendMessage, 0x102, %p_str%, 0, %control%, A
	return Chr(p_str)
}