-3

如何在 c++ 系统范围内获取当前输入语言。如果我切换到另一个窗口并在那里更改输入语言,我如何知道语言已更改以及更改为哪种语言?

4

2 回答 2

1

我认为这取决于操作系统,在 Windows 中,请尝试以下代码:

char szBuf[25];
double thId;
HANDLE hCurrentKBLayout;

hCurrentKBLayout = GetKeyboardLayout(0);
memset(szBuf, 0x00, 25);

ImmGetDescription(hCurrentKBLayout, szBuf, 50);
if(String(szBuf).Length()==0)
    strcpy(szBuf,"系统默认");
ShowMessage("current input language is:" + String(szBuf));
于 2013-10-31T09:19:08.537 回答
1

正式地,区域设置""应该对应于实现定义的区域设置,这通常应该对应于用户希望他的语言是什么。这在实践中是否有效在很大程度上取决于实施; std::locale().name()似乎总是"C"在我的 Windows 机器上返回(即使我没有运行美国版的 Windows)。

更一般地说,可能没有单一的“语言”。例如,输入在系统级别通常是语言中立的;关键因素是键盘的设置方式(但我经常从美式键盘输入法语或德语),一旦字符出现在您的程序中,您如何解释它们(大概,您想知道的是如何根据什么约定来解释它们)。如果您想了解其他程序或操作系统使用的约定,则必须找到一些特定于操作系统的方法;这是环境变量之类的一种标准LANGLC_CTYPE等包含此信息,但不同约定的编码方式各不相同(尽管我认为 Windows 的最新版本也支持 Posix 标准形式),并且 Unix 以外的操作系统也经常使用其他方式,所以你需要一些操作系统具体在这里。

于 2013-10-31T09:50:51.547 回答