当用户将 Windows 的语言键盘布局从EN 更改为 FR时,我想向用户显示一条消息。但我不知道当用户使用任务栏或ALT+更改它时如何通知我SHIFT。我应该使用哪个 win32api 函数?我需要这样的伪代码:
void inputLanguageChanged(char *ln)
{
message("You selected " + ln + " language");
}
这样做的传统方式是处理WM_INPUTLANGCHANGE
消息。但是这种方法有几个问题:
那么,更好的解决方案是实现ITfLanguageProfileNotifySink
interface,只要输入语言发生变化,就会调用它的OnLanguageChanged
方法,而不管它的变化方式如何。
但是,我看到您的问题同时带有 C 和 C++ 标签。您可以使用 C 中的 COM,但这确实令人头疼。如果您使用 C++,则简单得多。如果我需要在 C 程序中完成这项工作,我可能会找到一种方法来WM_INPUTLANGCHANGE
为我工作。也许我只是懒惰。
您可以使用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