列举Windows中可用的键盘布局
Enumerating the available keyboard layouts in Windows
是否有可能列举所有当前可用的键盘布局?所谓可用,我的意思是用户可以通过按Alt+Shift(或任何他选择的快捷方式)切换到它们,也就是说,它们在语言栏的菜单中。
或者,检查语言栏中是否有特定的布局也是有用的。
编辑:
非常感谢@oleg,我终于做了一个可以工作的函数:
bool IsActiveKeyboardLayout(DWORD dwPrimaryLangID)
{
TCHAR buf[KL_NAMELENGTH];
GetKeyboardLayoutName(buf);
DWORD dwActiveLangID = 0;
_stscanf(buf, _T("%X"), &dwActiveLangID);
if (dwPrimaryLangID == PRIMARYLANGID(dwActiveLangID))
return true;
return false;
}
bool IsKeyboardLayoutPresent(DWORD dwPrimaryLangID)
{
if (IsActiveKeyboardLayout(dwPrimaryLangID))
return true;
DWORD dwThreadID = GetCurrentThreadId();
HKL hOld = GetKeyboardLayout(dwThreadID);
for (;;)
{
ActivateKeyboardLayout((HKL) HKL_NEXT, 0);
if (hOld == GetKeyboardLayout(dwThreadID))
return false;
if (IsActiveKeyboardLayout(dwPrimaryLangID))
{
ActivateKeyboardLayout(hOld, 0);
return true;
}
}
}
GetKeyboardLayoutList函数似乎得到最接近您需要的信息。返回的信息是HKL
的数组,HANDLE的值如
0x04070407 -德文0x04110411 -日语0x04190419 -俄语0xe0200411 -日语
如果你对某种语言有多个输入法或者对一种语言有多个布局你可以在语言栏菜单中看到更多的项目。在64位操作系统上,值0x04070407将表示为0x0000000004070407。
在这里您可以阅读更多关于输入区域设置标识符和键盘布局的信息。
相关文章:
- 物理键盘上的触发器按键
- 如何使用C/C++在MacOSX中获得键盘布局
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 布局兼容类型的并集
- Qt自定义QPush按钮未显示在布局上
- 视窗键盘输入 c++
- 将鼠标和键盘输入发送到 unity3d 游戏 (Rust)
- 按钮悬停在 QT 中垂直布局的选项卡小部件中不起作用
- C ++异步键盘输入(标准方式)
- Vkkeyscanex因德语键盘布局而失败
- 查找有关当前键盘布局的字符的可能键组合
- 无法获取当前键盘布局
- Windows Phone:显示软件键盘后重新布局
- 如何在Windows(c++)中更改语言键盘布局
- 如何在用户更改Windows中的语言键盘布局时得到通知
- 如何捕捉键盘布局的变化
- 如何在Mac中使用c++实现键盘布局
- 可以为屏幕键盘获得物理键盘布局
- 从服务启动时键盘布局错误
- 列举Windows中可用的键盘布局