枚举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;
}
}
}
没有找到相关结果
已邀请:
1 个回复
扫窟
的数组,HANDLE的值类似于 0x04070407-德语 0x04110411-日语 0x04190419-俄语 0xe0200411-日语 如果您将某种语言更多地作为一种输入方法,或者将一种以上的语言更多地作为一种语言的一种布局,则可以有更多项,如在语言栏菜单中看到的那样。在64位操作系统上,值0x04070407将表示为0x0000000004070407。 在这里,您可以了解有关输入区域设置标识符和键盘布局的更多信息。