Compartir a través de


WM_INPUTLANGCHANGE (mensaje)

Se envía a la ventana afectada superior cuando cambia el idioma de entrada de una aplicación. Debe definir cualquier configuración específica de la aplicación y pasar el mensaje a la función DefWindowProc, que pasa el mensaje a todas las ventanas secundarias de primer nivel. Estas ventanas secundarias pueden pasar el mensaje a DefWindowProc para que lo pase a sus ventanas secundarias y así sucesivamente.

Una ventana recibe este mensaje mediante la función WindowProc.

#define WM_INPUTLANGCHANGE              0x0051

Parámetros

wParam

Tipo: **WPARAM**

Juego de caracteres de fuente BYTE para el idioma de entrada.

Si registra la clase de ventana con la versión Unicode de RegisterClassEx (RegisterClassExW), no suele ser necesario usar este valor. Si registra la clase de ventana con la versión ANSI de RegisterClassEx (RegisterClassExA), puede usar este valor para crear fuentes que muestren correctamente el juego de caracteres. Consulte el parámetro iCharSet de la función CreateFont para obtener una lista de los valores posibles.

lParam

Tipo: **LPARAM**

Identificador del idioma de entrada HKL.

La palabra inferior contiene un identificador de idioma para el idioma de entrada. La palabra superior contiene un identificador de dispositivo.

Valor devuelto

Tipo: LRESULT

Una aplicación debe devolver un valor distinto de cero si procesa este mensaje.

Comentarios

Puede recuperar el nombre de configuración regional BCP 47 del identificador de idioma llamando a la función LCIDToLocaleName. Una vez que tenga el nombre de la configuración regional, puede usar funciones de configuración regional modernas para extraer más información sobre la configuración regional.

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

Para obtener el nombre de la distribución del teclado activa, llame a GetKeyboardLayoutName. Para obtener más información, consulte Idiomas, configuraciones regionales y diseños de teclado.

Para obtener una lista de las distribuciones de entrada que se proporcionan con Windows, consulte Identificadores de teclado y editores de métodos de entrada para Windows.

Es posible que los cambios de perfil del Editor de métodos de entrada (IME) no se notifiquen con WM_INPUTLANGCHANGE. Puede usar ITfActiveLanguageProfileNotifySink desde Text Services Framework para controlar los cambios del servicio de texto o el idioma activo.

A partir de Windows 8

Es posible que algunas distribuciones de entrada no tengan identificadores de idioma asignados y se pueden notificar como identificadores de idioma transitorios, como LOCALE_TRANSIENT_KEYBOARD1 (0x2000) o LOCALE_TRANSIENT_KEYBOARD2 (0x2400), en la palabra inferior de LPARAM.

Dado que el sistema puede volver a asignar estos identificadores de idioma transitorios en cualquier momento (por ejemplo, cuando el usuario cambia su perfil de idioma) y puede identificar una configuración regional diferente basada en el usuario o en el sistema, no se pueden considerar identificadores duraderos. Consulte Nombres de configuración regional estándar para obtener más información.

Recupere el idioma asociado a la distribución de teclado o método de entrada actual llamando a Windows.Globalization.Language.CurrentInputMethodLanguageTag. Si la aplicación pasa etiquetas de idioma de CurrentInputMethodLanguageTag a cualquier función de compatibilidad con el idioma nacional, primero debe convertir las etiquetas con ResolveLocaleName. Si quiere recibir una notificación sobre un cambio de idioma en una aplicación para UWP, controle el evento Windows.UI.Text.Core.CoreTextServicesManager.InputLanguageChanged.

Requisitos

Requisito Valor
Cliente mínimo compatible
Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado
Winuser.h (incluya Windows.h)

Consulte también

Referencia

Conceptual