如何在用户更改Windows中的语言键盘布局时得到通知
How to be informed when user changes the language keyboard layout in Windows?
当用户更改Windows的语言键盘布局时,我想向用户显示一条消息,例如从EN更改为FR。但我不知道当用户使用任务栏或ALT+SHIFT更改它时,如何通知我。我应该使用哪个win32api函数?我需要这样的伪代码:
void inputLanguageChanged(char *ln)
{
message("You selected " + ln + " language");
}
执行此操作的传统方法是处理WM_INPUTLANGCHANGE
消息。但这种方法有几个问题:
- 它只发送到活动(聚焦)窗口,并且
- 它并不能捕捉到所有可能的情况,而且在现代版本的Windows上可能不可靠
因此,更好的解决方案是实现ITfLanguageProfileNotifySink
接口,无论输入语言的更改方式如何,只要输入语言发生更改,就会调用其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://learn.microsoft.com/windows/win32/intl/locale-nameshttps://learn.microsoft.com/windows/win32/intl/nls--name-based-apis-sample
相关文章:
- 物理键盘上的触发器按键
- 如何使用C/C++在MacOSX中获得键盘布局
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 布局兼容类型的并集
- Qt自定义QPush按钮未显示在布局上
- 视窗键盘输入 c++
- 将鼠标和键盘输入发送到 unity3d 游戏 (Rust)
- 按钮悬停在 QT 中垂直布局的选项卡小部件中不起作用
- C ++异步键盘输入(标准方式)
- Vkkeyscanex因德语键盘布局而失败
- 查找有关当前键盘布局的字符的可能键组合
- 无法获取当前键盘布局
- Windows Phone:显示软件键盘后重新布局
- 如何在Windows(c++)中更改语言键盘布局
- 如何在用户更改Windows中的语言键盘布局时得到通知
- 如何捕捉键盘布局的变化
- 如何在Mac中使用c++实现键盘布局
- 可以为屏幕键盘获得物理键盘布局
- 从服务启动时键盘布局错误
- 列举Windows中可用的键盘布局