winapi - 使用 win API 从 Win XP 操作系统检索键盘布局的语言名称

标签 winapi mfc

我正在 WIn XP 上使用 VC6 开发应用程序。 使用 GetKeyBoardLayoutList() 和 GetLocalInfo() API 从系统检索默认输入语言列表。

代码如下。

`UINT uLayouts; 
char szBuf[512];
HKL  *lpList = NULL;
uLayouts = GetKeyboardLayoutList(0, NULL);
lpList   = (HKL*)LocalAlloc(LPTR, (uLayouts * sizeof(HKL)));
uLayouts = GetKeyboardLayoutList(uLayouts, lpList);
for(UINT i = 0; i < uLayouts; i++)
{
    DWORD temp = (UINT)lpList[i] & 0xffffffff;
    GetLocaleInfo(MAKELCID(temp,SORT_DEFAULT), LOCALE_SLANGUAGE , szBuf, 512);
}`

在 szBuf 中,我得到的输入语言名称是“英语(美国)”,而操作系统中的实际名称是“英语(美国)- 美国”

我们如何才能获得操作系统中存在的输入语言的确切名称? 我们也尝试使用不同的标志,

LOCALE_SENGLANGUAGE //English

LOCALE_ILANGUAGE, LOCALE_SLANGUAGE, LOCALE_ICOUNTRY, LOCALE_SABBREVLANGNAME, LOCALE_SNATIVELANGNAME, LOCALE_SABBREVCTRYNAME, LOCALE_SNATIVECTRYNAME

但是无法获取准确的语言名称。

最佳答案

使用这个:

 LOCALE_IMEASURE // 0 = metric, 1 = US

关于winapi - 使用 win API 从 Win XP 操作系统检索键盘布局的语言名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12364659/

相关文章:

windows - 使用 KBDLLHOOKSTRUCT 确定第一次按键

c# - UWP 从 WPF 应用程序启动我的应用程序

c++ - 更改通过钩子(Hook)的击键(c/c++)

c# - 如何在我的程序的开始菜单中创建一个菜单?

c++ - 为什么同样适用于 Windows 而不适用于 Unix?

c++ - 主框架中的 MFC GUI 和其他也需要 GUI 的 DLL

c++ - 如何在 Windows 中获取文件安全属性

c++ - 在 CString::Format 中使用 CString 对象

c++ - 是否可以在 CEdit 控件的纯数字输入模式和字母数字输入模式之间切换?

windows - 使用 mfc/win32 将我程序自己的窗口的一部分保存到位图文件