首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

:获取当前输入法名称的奇怪有关问题

2012-12-31 
高手进:获取当前输入法名称的奇怪问题!我想获取当前输入法名称,详细代码就不说了,网上有,主要是调用 GetKe

高手进:获取当前输入法名称的奇怪问题!
我想获取当前输入法名称,详细代码就不说了,网上有,主要是调用 GetKeyboardLayout 和 ImmGetDescription 这两个函数,或者调用 GetKeyboardLayout  获取输入法的 HKL 后再在注册表中查找输入法名称。

但是有一个奇怪的问题,对于“五笔”、“双拼”、“紫光拼音”这些输入法获得的结果都是对的,但有少数输入法获取的名称却不对,例于我实验时用“微软拼音输入法 2003”时,获取的输入法名称却是“中文(简体)-美式键盘”。

另外我经过试验发现,当输入法设置为“微软拼音输入法 2003”时,调用 GetKeyboardLayoutName 获得的值是 00000804,而这个值正是“中文(简体)-美式键盘”的 GetKeyboardLayoutName 。


不知道为什么会出现这样的情况,请教高手。我想知道如何能够准确地获得当前输入法的名称。
[解决办法]
楼主真是细心人,微软拼音输入法是不是你的默认输入法,所以调用时就返回了中文-美式键盘?
[解决办法]
没搞过,学习并帮顶
[解决办法]
没弄过。帮定关注
[解决办法]
帮顶  没研究过
[解决办法]
帮顶一下
[解决办法]

引用:
楼主真是细心人,微软拼音输入法是不是你的默认输入法,所以调用时就返回了中文-美式键盘?
正解
[解决办法]
我电脑上没有“微软拼音输入法 2003”,试试看下面的代码是否正常

#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;   
  }    


[解决办法]
Mark...........
[解决办法]
学习了!
[解决办法]
mark一下
[解决办法]
在不同的程序间切换时 输入法是会跟着变的 如我在CSDN论坛逛时是搜狗输入法 QQ来消息打开时还是默认输入法 我得切换一下才行
你在执行你的程序时 当前的输入法是什么
焦点给到你的程序时 输入法又是什么 
你可以在点击你程序的按钮前 先切换输入法试试

热点排行