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 |
|
Confira também
Referência
- DefWindowProc
- WindowProc
- WM_INPUTLANGCHANGEREQUEST
- GetKeyboardLayout
- GetKeyboardLayoutList
- GetKeyboardLayoutName
- Windows.Globalization.Language.CurrentInputMethodLanguageTag
- Windows.UI.Text.Core.CoreTextServicesManager.InputLanguageChanged
Conceitual