WM_INPUTLANGCHANGE メッセージ
アプリケーションの入力言語が変更された後、影響を受ける最上位のウィンドウに送信されます。 アプリケーション固有の設定を行い、メッセージを DefWindowProc 関数に渡す必要があります。これにより、メッセージがすべての第 1 レベルの子ウィンドウに渡されます。 これらの子ウィンドウは、メッセージを DefWindowProc に渡して、メッセージが子ウィンドウに渡されるようにすることができます (以降同様)。
ウィンドウは、WindowProc 関数を介してこのメッセージを受け取ります。
#define WM_INPUTLANGCHANGE 0x0051
パラメーター
-
wParam
-
型: **WPARAM**
入力言語の BYTE フォント文字セット。
Unicode バージョンの RegisterClassEx (RegisterClassExW) を使用してウィンドウ クラスを登録する場合は、通常、この値を使用する必要はありません。 ANSI バージョンの RegisterClassEx (RegisterClassExA) を使用してウィンドウ クラスを登録する場合、この値を使用して、文字セットを正しく表示できるフォントを作成できます。 使用可能な値の一覧については、CreateFont 関数の iCharSet パラメーターを参照してください。
-
lParam
-
型: **LPARAM**
HKL 入力ロケール識別子。
下位ワードには、入力言語の言語識別子が含まれています。 上位ワードには、デバイス ハンドルが含まれています。
戻り値
型: LRESULT
アプリケーションでこのメッセージを処理する場合は、0 以外を返す必要があります。
解説
LCIDToLocaleName 関数を呼び出すことで、言語識別子から BCP 47ロケール名を取得できます。 ロケール名を取得したら、モダン ロケール関数を使用して追加のロケール情報を抽出できます。
case WM_INPUTLANGCHANGE:
{
HKL hkl = (HKL)lParam;
// LANGIDs are deprecated. Use BCP 47 locale names where possible.
LANGID langId = LOWORD(HandleToUlong(hkl));
WCHAR localeName[LOCALE_NAME_MAX_LENGTH];
LCIDToLocaleName(MAKELCID(langId, SORT_DEFAULT), localeName, LOCALE_NAME_MAX_LENGTH, 0);
// Get the ISO abbreviated language name (for example, "eng").
WCHAR lang[9];
GetLocaleInfoEx(localeName, LOCALE_SISO639LANGNAME2, lang, 9);
// Get the keyboard layout identifier (for example, "00020409" for United States-International keyboard layout)
WCHAR keyboardLayoutId[KL_NAMELENGTH];
GetKeyboardLayoutNameW(keyboardLayoutId);
}
現在アクティブなキーボード レイアウトの名前を取得するには、GetKeyboardLayoutName を呼び出 します。 詳細については、「言語、ロケール、キーボード レイアウト」を参照してください。
Windows で提供される入力レイアウトの一覧については、「Windows 用キーボード識別子と入力方式エディター」を参照してください。
入力方式エディター (IME) プロファイルの変更が WM_INPUTLANGCHANGE で通知されない場合があります。 Text Services Framework の ITfActiveLanguageProfileNotifySink を使用して、アクティブな言語またはテキスト サービスの変更を処理できます。
Windows 8 以降
一部の入力レイアウトに言語識別子が割り当てられておらず、LPARAM の下位ワードで LOCALE_TRANSIENT_KEYBOARD1
(0x2000
) や LOCALE_TRANSIENT_KEYBOARD2
(0x2400
) などの一時的な言語識別子として報告されることがあります。
これらの一時的な言語識別子は、随時システムによって再割り当てされることがあり (ユーザーが言語プロファイルを変更したときなど)、ユーザーやシステムに基づいて異なるロケールを識別できるものなので、永続的な識別子とは見なせません。 詳細については、LCID の廃止に関するページを参照してください。
Windows.Globalization.Language.CurrentInputMethodLanguageTag を呼び出して、現在のキーボード レイアウトまたは入力方式に関連付けられている言語を取得します。 アプリで CurrentInputMethodLanguageTag から各国語サポート関数に言語タグを渡す場合は、最初に ResolveLocaleName を使ってタグを変換する必要があります。 UWP アプリでの言語の変更に関する通知を受け取るには、Windows.UI.Text.Core.CoreTextServicesManager.InputLanguageChanged イベントを処理します。
必要条件
要件 | Value |
---|---|
サポートされている最小のクライアント |
Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー |
Windows 2000 Server [デスクトップ アプリのみ] |
ヘッダー |
|
関連項目
リファレンス
- DefWindowProc
- WindowProc
- WM_INPUTLANGCHANGEREQUEST
- GetKeyboardLayout
- GetKeyboardLayoutList
- GetKeyboardLayoutName
- Windows.Globalization.Language.CurrentInputMethodLanguageTag
- Windows.UI.Text.Core.CoreTextServicesManager.InputLanguageChanged
Conceptual