是否可以枚举所有当前可用的键盘布局。可用我的意思是用户可以通过按 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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
函数GetKeyboardLayoutList似乎可以获取最接近您需要的信息。返回的信息是 的数组HKL,HANDLE 具有类似的值
0x04070407 - 德语 0x04110411 - 日语 0x04190419 - 俄语 0xe0200411 - 日语
如果您将某种语言作为一种输入法或多种作为一种语言的一种布局,您可以在语言栏菜单中看到更多项目。在 64 位操作系统上,值 0x04070407 将表示为 0x0000000004070407。
您可以在此处阅读有关输入区域设置标识符和键盘布局的更多信息。
| 归档时间: |
|
| 查看次数: |
2625 次 |
| 最近记录: |