WM_INPUTLANGCHANGE-Nachricht

Wird an das am häufigsten betroffene Fenster gesendet, nachdem die Eingabesprache einer Anwendung geändert wurde. Sie sollten alle anwendungsspezifischen Einstellungen vornehmen und die Nachricht an die DefWindowProc-Funktion übergeben, die die Nachricht an alle untergeordneten Fenster der ersten Ebene übergibt. Diese untergeordneten Fenster können die Nachricht an DefWindowProc übergeben, damit die Nachricht an ihre untergeordneten Fenster übergeben wird usw.

Ein Fenster empfängt diese Meldung über die WindowProc-Funktion.

#define WM_INPUTLANGCHANGE              0x0051

Parameter

wParam

Type: **WPARAM**

Der BYTE-Schriftzeichensatz für die Eingabesprache.

Wenn Sie die Fensterklasse mithilfe der Unicode-Version von RegisterClassEx (RegisterClassExW) registrieren, müssen Sie diesen Wert in der Regel nicht verwenden. Wenn Sie die Fensterklasse mithilfe der ANSI-Version von RegisterClassExANSI-Version von RegisterClassEx (RegisterClassExA) registrieren, kann dieser Wert verwendet werden, um Schriftarten zu erstellen, die den Zeichensatz ordnungsgemäß anzeigen können. Eine Liste möglicher Werte finden Sie im iCharSet-Parameter der CreateFont-Funktion.

lParam

Type: **LPARAM**

Der Bezeichner des HKL-Eingabegebietsschemas.

Das Wort mit niedriger Ordnung enthält einen Sprachbezeichner für die Eingabesprache. Das Wort mit hoher Ordnung enthält ein Geräte-Handle.

Rückgabewert

Typ: LRESULT

Eine Anwendung sollte einen Wert ungleich 0 zurückgeben, wenn sie diese Nachricht verarbeitet.

Hinweise

Sie können den BCP 47-Gebietsschemanamen aus dem Sprachbezeichner abrufen, indem Sie die Funktion LCIDToLocaleName aufrufen. Sobald Sie den Gebietsschemanamen haben, können Sie moderne Gebietsschemafunktionen verwenden, um zusätzliche Gebietsschemainformationen zu extrahieren.

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);
}

Um den Namen des aktuell aktiven Tastaturlayouts abzurufen, rufen Sie GetKeyboardLayoutName auf. Weitere Informationen finden Sie unter Sprachen, Gebietsschemas und Tastaturlayouts.

Eine Liste der Eingabelayouts, die mit Windows bereitgestellt werden, finden Sie unter Tastaturbezeichner und Eingabemethoden-Editoren für Windows.

Profiländerungen des Eingabemethoden-Editors (Input Method Editor, IME) werden möglicherweise nicht mit WM_INPUTLANGCHANGE mitgeteilt. Sie können ITfActiveLanguageProfileNotifySink aus dem Textdienst-Framework (Text Services Framework, TSF) verwenden, um Änderungen der aktiven Sprache oder des Textdiensts zu behandeln.

Ab Windows 8

Einige Eingabelayouts verfügen möglicherweise nicht über zugewiesene Sprachbezeichner und können als vorübergehende Sprachbezeichner wie LOCALE_TRANSIENT_KEYBOARD1 (0x2000) oder LOCALE_TRANSIENT_KEYBOARD2 (0x2400) im Wort mit niedriger Ordnung von LPARAM gemeldet werden.

Da diese vorübergehenden Sprachbezeichner vom System jederzeit erneut zugewiesen werden können (z. B. wenn Benutzer*innen ihr Sprachprofil ändern), und ein anderes Gebietsschema basierend auf dem bzw. der Benutzer*in und/oder dem System identifizieren können, können sie nicht als dauerhafte Bezeichner betrachtet werden. Weitere Informationen finden Sie unter Die Einstellung von LCIDs.

Rufen Sie die Sprache ab, die dem aktuellen Tastaturlayout oder der aktuellen Eingabemethode zugeordnet ist, indem Sie Windows.Globalization.Language.CurrentInputMethodLanguageTag aufrufen. Wenn Ihre App Sprachtags von CurrentInputMethodLanguageTag an alle National Language Support-Funktionen übergibt, muss sie zuerst die Tags mit ResolveLocaleName konvertieren. Wenn Sie über eine Sprachänderung in einer UWP-App benachrichtigt werden möchten, behandeln Sie das Ereignis Windows.UI.Text.Core.CoreTextServicesManager.InputLanguageChanged.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows 2000 Server [nur Desktop-Apps]
Header
Winuser.h (einschließlich Windows.h)

Siehe auch

Referenz

Konzept