SendMessage 能不能激活和关闭中文输入法?

lj_lt 2009-09-02 12:55:23
是这样,由于vfp 的imemode在vista /windows 7环境下,不起作用!
而且原先win 32 API 关于输入法的函数 在vista /windows 7下已经不起作用了.


现在想一下可能以下几个方法解决这个问题

1.用支持vista /windows 7环境下能使用imemode 的activex,目前只看到ms form text 2.0 可以!

2.就是用vb.net / c# 写组件给vfp用,这个比较麻烦,慢不说,发布也麻烦,而且和xp不兼容

3.模拟按键(sendkey),这个不好,由于无法知道当时的输入状态

4.就指望SendMessage 了 (应该有一个激活和关闭输入法的消息把,WM_IME_SETCONTEXT ?,没有试成功)

对windows消息不是很熟悉,我一直怀疑SendMessage 有可能搞定!
大家想想看,SendMessage 可能搞定吗,能不能用最简单的方法解决这个问题?
最好不要什么外部的控件!
非常谢谢
...全文
673 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lj_lt 2009-09-03
  • 打赏
  • 举报
回复
如果只用vista 自带的输入法,不用后来安装的包括 ms pin 2007 ,搜狗输入法,万能五笔 等
就会出问题!


imm32 不能认识vista/windows 7 自带的很多输入法!
lj_lt 2009-09-02
  • 打赏
  • 举报
回复
谢谢dkfdtf,基本上已经搞定!
lj_lt 2009-09-02
  • 打赏
  • 举报
回复
谢谢,dkfdtf, 你操作系统什么环境,是vista/windows 7 吗?


网络上唯一这方面的的资料
http://www.microsoft.com/taiwan/msdn/columns/huang_jhong_cheng/vista.htm

其实对于基础资料输入也无所谓的,那些表平常不大动
对于业务数据输入比较麻烦,天天频繁的输入,如果表格中有一列需要输入中文,每次到这列都要切换输入法,有点麻烦

十豆三 2009-09-02
  • 打赏
  • 举报
回复
dkfdtf 是 API 专家,应该这是最简单的方法了。
都市夜猫 2009-09-02
  • 打赏
  • 举报
回复
我的机器上装有 WindowsXp.sp2, Windows2003.sp2, Vista(Ultimate).sp1
都市夜猫 2009-09-02
  • 打赏
  • 举报
回复
据我所知,常用的几个与输入法切换有关的 api 如下:

DECLARE Long GetKeyboardLayout IN WIN32API Long
DECLARE Long LoadKeyboardLayout IN WIN32API String, Long
DECLARE Long ImmSimulateHotKey IN imm32 Long, Long
DECLARE Long ImmIsIME IN imm32 Long

* 取当前输入法 id, 我机器上的搜狗输入法 id 为 E0200804
? Trans(GetKeyboardLayout(0), '@0')
* 判断当前输入法是否为 IME 输入法:
? 0 != ImmIsIME(GetKeyboardLayout(0))
* 切换成英文输入法:
LoadKeyboardLayout('04090409', 3)
* 切换成搜狗中文输入法:
LoadKeyboardLayout('E0200804', 3)
或者:
ImmSimulateHotKey(_Screen.hWnd, 0x10)

由于 Vista 对 imm32.dll 做了较大改变,以标准用户权限调用两个 Imm 开头的 api 时可能会失败,你可以多做些实验来确定该如何组合上面的几个函数

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧