高手进:获取当前输入法名称的奇怪问题!
我想获取当前输入法名称,详细代码就不说了,网上有,主要是调用 GetKeyboardLayout 和 ImmGetDescription 这两个函数,或者调用 GetKeyboardLayout 获取输入法的 HKL 后再在注册表中查找输入法名称。
但是有一个奇怪的问题,对于“五笔”、“双拼”、“紫光拼音”这些输入法获得的结果都是对的,但有少数输入法获取的名称却不对,例于我实验时用“微软拼音输入法 2003”时,获取的输入法名称却是“中文(简体)-美式键盘”。
另外我经过试验发现,当输入法设置为“微软拼音输入法 2003”时,调用 GetKeyboardLayoutName 获得的值是 00000804,而这个值正是“中文(简体)-美式键盘”的 GetKeyboardLayoutName 。
不知道为什么会出现这样的情况,请教高手。我想知道如何能够准确地获得当前输入法的名称。
[解决办法]
楼主真是细心人,微软拼音输入法是不是你的默认输入法,所以调用时就返回了中文-美式键盘?
[解决办法]
没搞过,学习并帮顶
[解决办法]
没弄过。帮定关注
[解决办法]
帮顶 没研究过
[解决办法]
帮顶一下
[解决办法]
#include "imm.h"
#pragma comment(lib, "imm32.lib")
void EnumKbLayout() //枚举KeyboardLayout
{
int nSize = GetKeyboardLayoutList(0 , 0);
if(nSize != 0)
{
HKL FAR * lpList = (HKL FAR *)new HKL[nSize];
ZeroMemory(lpList, sizeof(HKL) * nSize);
if(GetKeyboardLayoutList(nSize, lpList) == nSize)
{
for(int i=0; i<nSize; i++)
{
HKL Val = lpList[i];
TCHAR uChar[1025] = {0};
ImmGetDescription(Val, uChar, 1024);
CString dbgStr;
dbgStr.Format( _T("HKL=%08X [%s]\r\n"), Val, uChar);
OutputDebugString(dbgStr);
}
}
delete []lpList;
}
}