6

当用户将 Windows 的语言键盘布局EN 更改为 FR时,我想向用户显示一条消息。但我不知道当用户使用任务栏或ALT+更改它时如何通知我SHIFT。我应该使用哪个 win32api 函数?我需要这样的伪代码:

void inputLanguageChanged(char *ln)
{
  message("You selected " + ln + " language");
}
4

2 回答 2

9

这样做的传统方式是处理WM_INPUTLANGCHANGE消息。但是这种方法有几个问题:

那么,更好的解决方案是实现ITfLanguageProfileNotifySinkinterface,只要输入语言发生变化,就会调用它的OnLanguageChanged方法,而不管它的变化方式如何。

但是,我看到您的问题同时带有 C 和 C++ 标签。您可以使用 C 中的 COM,但这确实令人头疼。如果您使用 C++,则简单得多。如果我需要在 C 程序中完成这项工作,我可能会找到一种方法来WM_INPUTLANGCHANGE为我工作。也许我只是懒惰。

于 2013-07-28T12:38:16.750 回答
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

于 2021-03-17T16:59:22.270 回答