使用 win API 从 Win XP OS 检索键盘布局的语言名称

Posted

技术标签:

【中文标题】使用 win API 从 Win XP OS 检索键盘布局的语言名称【英文标题】:Retrieving language name for keyboard layout from Win XP OS, using win API 【发布时间】:2012-09-11 07:20:20 【问题描述】:

我正在 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 //英语

LOCALE_ILANGUAGE、LOCALE_SLANGUAGE、LOCALE_ICOUNTRY、LOCALE_SABBREVLANGNAME、LOCALE_SNATIVELANGNAME、LOCALE_SABBREVCTRYNAME、LOCALE_SNATIVECTRYNAME

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

【问题讨论】:

您在哪里看到您的语言为“英语(美国) - 美国”?我没有看到任何具有该名称的键盘布局。我只能看到“英语(美国)” WinXP 系统:控制面板-> 区域和语言选项-> 语言-> 文本服务(详细信息按钮)-> 设置-> 默认输入语言框。在上面的路径中,我们可以看到“English (United States) - US”。 【参考方案1】:

使用这个:

 LOCALE_IMEASURE // 0 = metric, 1 = US

【讨论】:

这到底是怎么回答这个问题的? LOCALE_IMEASURE 提供有关特定语言环境使用的测量系统的信息。它没有说明问题所要求的“输入语言”。

以上是关于使用 win API 从 Win XP OS 检索键盘布局的语言名称的主要内容,如果未能解决你的问题,请参考以下文章

ARC_x86_OS选择

win2k,XP下用setupapi.dll自动安装Driver

win7访问xp局域网电脑需要密码,输入XP机器的用户名和密码了,显示错误。

深入windows的关机消息截获-从XP到Win7的变化(在XP中程序可以阻止关机,但是在Win7中程序无法阻止关机,可Block的时间从1秒调到了5秒)

win7用vhd启动XP

深入windows的关机消息截获-从XP到Win7的变化(在XP中程序可以阻止关机,但是在Win7中程序无法阻止关机,可Block的时间从1秒调到了5秒) good