gpt4 book ai didi

c++ - 获取当前事件的语言键盘

转载 作者:行者123 更新时间:2023-11-30 05:05:26 29 4
gpt4 key购买 nike

我想要激活语言键盘

为了获取事件语言,我使用了这个函数:

WCHAR name[256];

GUITHREADINFO Gti;
::ZeroMemory(&Gti, sizeof(GUITHREADINFO));
Gti.cbSize = sizeof(GUITHREADINFO);
::GetGUIThreadInfo(0, &Gti);
DWORD dwThread = ::GetWindowThreadProcessId(Gti.hwndActive, 0);
HKL lang = ::GetKeyboardLayout(dwThread);

LANGID language = (LANGID)(((UINT)lang) & 0x0000FFFF); // bottom 16 bit of HKL is LANGID
LCID locale = MAKELCID(language, SORT_DEFAULT);

GetLocaleInfo(locale, LOCALE_SLANGUAGE, name, 256);

return CString(name);

但是这个函数用最后一次更改(不是新语言)检索最后一个,但我想获得新语言,有什么问题?怎么了?

最佳答案

根据文档 ( GetKeyboardLayout function ),当 0 用作默认参数时,它会从当前线程获取键盘布局:

HKL lang = ::GetKeyboardLayout(0);

要创建语言 ID,使用以下宏:

#define MAKELANGID(p, s)       ((((WORD  )(s)) << 10) | (WORD  )(p))

还定义了以下辅助宏:

#define PRIMARYLANGID(lgid)    ((WORD  )(lgid) & 0x3ff)
#define SUBLANGID(lgid) ((WORD )(lgid) >> 10)

所以我只是将代码修改为:

LANGID language = PRIMARYLANGID(lang);

它对我来说工作正常。

要监听键盘变化,应该处理 WM_INPUTLANGCHANGE 消息。

实际上,您必须在指定的线程中有一个消息循环,否则在您重新启动应用程序之前不会检测到语言更改,控制台应用程序就是一个很好的例子。[ 2 ]

关于c++ - 获取当前事件的语言键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48355262/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com