如何获取当前的输入法??

dxhh99 2010-03-07 12:12:17
当前的控件是Edit1 输入是 "中文 (简体) - 搜狗拼音输入法"

想在Edit1 失去焦点是保存这个输入法,当获得焦点是重新设置,(不能用ImeName设置,因为每个人使用的输入法不同)

如何获得当前的输入法名称??

找到这段代码:

char szBuf[25];
double thId;
HANDLE hCurrentKBLayout;
//取回描述应用程序键盘布局的句柄,0表示取当前输入法
hCurrentKBLayout = GetKeyboardLayout(0);
memset(szBuf, 0x00, 25);
//获取指定输入法的名称
ImmGetDescription(hCurrentKBLayout, szBuf, 50);
if(String(szBuf).Length()==0)
strcpy(szBuf,"系统默认");
ShowMessage("当前输入法: " + String(szBuf));


取得当前的输入法是: "搜狗拼音输入法"
怎么样取得: "中文 (简体) - 搜狗拼音输入法"

...全文
363 6 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ydlchina 2010-03-08

HKL myhkl;
void __fastcall TForm1::Edit6Exit(TObject *Sender)
{
myhkl=GetKeyboardLayout(0);//获得当前输入法
if(ImmIsIME(myhkl))
ImmSimulateHotKey(Handle,IME_CHOTKEY_IME_NONIME_TOGGLE);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit6Enter(TObject *Sender)
{
if(ImmIsIME(myhkl))
ActivateKeyboardLayout(myhkl,KLF_ACTIVATE);
}
//---------------------------------------------------------------------------

  • 打赏
  • 举报
回复
dxhh99 2010-03-07
如果在程序里不设置Edit1->ImeName,

不管什么时候 ShowMessage(Edit1->ImeName) 都是空的..
  • 打赏
  • 举报
回复
周药师 2010-03-07
"不能用ImeName设置" ??
不要设置,但可以通过它获取当前输入法名称:
ShowMessage(Edit1->ImeName) ;
  • 打赏
  • 举报
回复
dxhh99 2010-03-07
自己顶一下..........
  • 打赏
  • 举报
回复
dxhh99 2010-03-07
这样设置没问题,

关键是如何才能获取当前的输入法是 "中文 - 紫光华宇拼音输入法V6"

这个输入法不是固定的,每个人使用不同的输入法.

在失去焦点时(转到其他控件里英文录入)保存输入法,获得焦点时恢复输入法.
  • 打赏
  • 举报
回复
ydlchina 2010-03-07
我没安装搜狗,安装的是紫光华宇拼音输入法

void __fastcall TForm1::Edit1Enter(TObject *Sender)
{ //换成你需要的输入法,具体名字在控制面板中找到输入法,看具体名称
Edit1->ImeName = "中文 - 紫光华宇拼音输入法V6";
}
  • 打赏
  • 举报
回复
发帖
Windows SDK/API

1216

社区成员

C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
帖子事件
创建了帖子
2010-03-07 12:12
社区公告
暂无公告