Partilhar via


Mensagem WM_INPUTLANGCHANGE

Enviado para a janela mais afetada após a alteração do idioma de entrada de um aplicativo. Você deve fazer configurações específicas do aplicativo e passar a mensagem para a função DefWindowProc, que passa a mensagem para todas as janelas filho de primeiro nível. Essas janelas filho podem passar a mensagem para DefWindowProc para que ela passe a mensagem para suas janelas filho e assim por diante.

Uma janela recebe essa mensagem por meio da sua função WindowProc.

#define WM_INPUTLANGCHANGE              0x0051

Parâmetros

wParam

Tipo: **WPARAM**

O conjunto de caracteres de fonte BYTE para o idioma de entrada.

Se você registrar a classe de janela usando a versão Unicode de RegisterClassEx (RegisterClassExW), normalmente não será necessário usar esse valor. Se você registrar a classe de janela usando a versão ANSI de RegisterClassEx (RegisterClassExA), esse valor poderá ser usado para criar fontes que possam exibir corretamente o conjunto de caracteres. Consulte o parâmetro iCharSet da função CreateFont para obter uma lista de valores possíveis.

lParam

Tipo: **LPARAM**

O identificador de localidade de entrada HKL.

A palavra baixa contém um Identificador de Idioma para o idioma de entrada. A palavra alta contém um identificador de dispositivo.

Retornar valor

Tipo: LRESULT

Um aplicativo deverá retornar nonzero se processar essa mensagem.

Comentários

Você pode recuperar o nome da localidade BCP 47do identificador de idioma chamando a função LCIDToLocaleName . Depois de ter o nome da localidade, você poderá usar funções de localidade modernas para extrair informações adicionais de localidade.

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 obter o nome do layout de teclado ativo no momento, chame GetKeyboardLayoutName. Para obter mais informações, consulte Idiomas, Localidades e Layouts de Teclado.

Para obter uma lista dos layouts de entrada fornecidos com o Windows, consulte Identificadores de Teclado e Editores de Método de Entrada para Windows.

As alterações de perfil do IME (Editor de Método de Entrada) podem não ser notificadas com WM_INPUTLANGCHANGE. Você pode usar ITfActiveLanguageProfileNotifySink da Estrutura de Serviços de Texto para lidar com alterações no serviço de texto ou idioma ativo.

Começando com o Windows 8

Alguns layouts de entrada podem não ter identificadores de idioma atribuídos e podem ser relatados como identificadores de linguagem transitórios, como LOCALE_TRANSIENT_KEYBOARD1 (0x2000) ou LOCALE_TRANSIENT_KEYBOARD2 (0x2400), na palavra baixa de LPARAM.

Como esses identificadores transitórios de idioma podem ser atribuídos novamente pelo sistema a qualquer momento (como quando o usuário altera seu Perfil de Idioma) e podem identificar uma localidade diferente com base no usuário e/ou no sistema, eles não podem ser considerados identificadores duráveis. Consulte a substituição de LCIDs para obter mais informações.

Recupere o idioma associado ao layout de teclado atual ou ao método de entrada chamando Windows.Globalization.Language.CurrentInputMethodLanguageTag. Se o aplicativo passar marcas de idioma de CurrentInputMethodLanguageTag para qualquer funções de Suporte à Linguagem Nacional, ele deverá primeiro converter as marcas com ResolveLocaleName. Se você quiser ser notificado sobre uma alteração de idioma em um aplicativo UWP, manipule o evento Windows.UI.Text.Core.CoreTextServicesManager.InputLanguageChanged.

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho
Winuser.h (inclui Windows.h)

Confira também

Referência

Conceitual