我想在用户更改 Windows的语言键盘布局时向用户显示消息,例如从 EN到FR 。但是我不知道当用户使用任务栏或 ALT + SHIFT 更改它时,如何通知我。我应该使用哪种win32api功能? 我需要像这样的伪代码:
void inputLanguageChanged(char *ln)
{
message("You selected " + ln + " language");
}
答案 0 :(得分:4)
传统的做法是处理WM_INPUTLANGCHANGE
message。但是这种方法存在一些问题:
然后,更好的解决方案是实现ITfLanguageProfileNotifySink
interface,无论输入语言如何更改,都会在输入语言发生变化时调用OnLanguageChanged
method。
但是,我发现你的问题都标有C和C ++标签。你可以使用来自C的COM,但这是一个真正的痛苦。如果你使用C ++会更简单。如果我需要在C程序中完成这项工作,我可能只是找到一种方法让WM_INPUTLANGCHANGE
为我工作。也许我只是懒惰。
答案 1 :(得分:1)
您可以使用 WM_INPUTLANGCHANGE
消息:
case WM_INPUTLANGCHANGE:
{
HKL hkl = (HKL)lParam;
WCHAR localeName[LOCALE_NAME_MAX_LENGTH];
LCIDToLocaleName(MAKELCID(LOWORD(hkl), SORT_DEFAULT), localeName, LOCALE_NAME_MAX_LENGTH, 0);
WCHAR lang[9];
GetLocaleInfoEx(localeName, LOCALE_SISO639LANGNAME2, lang, 9);
}
https://docs.microsoft.com/windows/win32/intl/locale-names https://docs.microsoft.com/windows/win32/intl/nls--name-based-apis-sample