IME の入力モードを取得する

IME の入力モードを取得するには, ImmGetConversionStatus 関数を使います。たとえば下記の関数のようにエディットボックスのウィンドウハンドルを指定して IME の入力モードを取得する関数を定義できます。

DWORD GetInputScope(HWND hEdit)
{
	DWORD dwConv = 0, dwSent;
	const HIMC hImc = ImmGetContext(hEdit);
	if (!ImmGetOpenStatus(hImc))
	{
		return dwConv;
	}
	ImmGetConversionStatus(hImc, &dwConv, &dwSent);
	ImmReleaseContext(hEdit, hImc);
	return dwConv;
}

戻り値は、下記のフラグで構成されます。

IME_CMODE_ALPHANUMERIC
IME_CMODE_NATIVE
IME_CMODE_JAPANESE
IME_CMODE_KATAKANA
IME_CMODE_LANGUAGE
IME_CMODE_FULLSHAPE
IME_CMODE_ROMAN
IME_CMODE_CHARCODE
IME_CMODE_HANJACONVERT

[IME OFF (半角英数)] = IME_CMODE_ALPHANUMERIC

[半角英数] = IME_CMODE_ROMAN

[全角英数] = IME_CMODE_ROMAN | IME_CMODE_FULLSHAPE

[ひらがな] = IME_CMODE_NATIVE | IME_CMODE_JAPANESE |
IME_CMODE_LANGUAGE | IME_CMODE_ROMAN | IME_CMODE_FULLSHAPE

[カタカナ] = IME_CMODE_NATIVE | IME_CMODE_JAPANESE | IME_CMODE_LANGUAGE | IME_CMODE_ROMAN | IME_CMODE_FULLSHAPE | IME_CMODE_KATAKANA

[半角カタカナ] = IME_CMODE_NATIVE | IME_CMODE_JAPANESE | IME_CMODE_LANGUAGE | IME_CMODE_ROMAN | IME_CMODE_KATAKANA

※ Windows 7 まで IME の切り替えはスレッド単位で行われていましたが、Windows 8 以降では、ユーザー単位で切り替わることになったようです。
そのため、他のエディットボックスの IME で入力モードを変更しても指定したエディットボックスの入力が連動して変わるようになっているようです。

サンプルプロジェクトのダウンロード


スポンサーリンク
広告1
広告1

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
広告1