我想获取当前输入法名称,详细代码就不说了,网上有,主要是调用 GetKeyboardLayout 和 ImmGetDescription 这两个函数,或者调用 GetKeyboardLayout 获取输入法的 HKL 后再在注册表中查找输入法名称。但是有一个奇怪的问题,对于“五笔”、“双拼”、“紫光拼音”这些输入法获得的结果都是对的,但有少数输入法获取的名称却不对,例于我实验时用“微软拼音输入法 2003”时,获取的输入法名称却是“中文(简体)-美式键盘”。另外我经过试验发现,当输入法设置为“微软拼音输入法 2003”时,调用 GetKeyboardLayoutName 获得的值是 00000804,而这个值正是“中文(简体)-美式键盘”的 GetKeyboardLayoutName 。
不知道为什么会出现这样的情况,请教高手。我想知道如何能够准确地获得当前输入法的名称。
不知道为什么会出现这样的情况,请教高手。我想知道如何能够准确地获得当前输入法的名称。
解决方案 »
- 一个计时器程序,编译没问题,但是运行不了,哪位能帮忙看下呢?
- doverb失败
- 关于TabCtrl控件参数传递问题
- CImageList中Create(20, 30, ILC_COLOR24|ILC_MASK, 4, 8)?
- 请问微软这样的公司,是怎么做到代码的保密的?
- USB过滤驱动:在OnStartDevice中构造IRP读U盘0扇区的问题
- 如何让一个线程充当读写角色
- 一个对高手来说太easy得问题!!!
- 在用户输入地址回车后,怎么才能得到浏览器地址栏的地址
- 新手問題:codeguru是個什麼網站?如何找到其中的源碼?
- http底层是通过socket实现的吗?
- shutdown(sock, SD_SEND)有没有必要?shutdown要等很久才返回关闭的消息。
#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;
}
}
你在执行你的程序时 当前的输入法是什么
焦点给到你的程序时 输入法又是什么
你可以在点击你程序的按钮前 先切换输入法试试