北大中文论坛 www.pkucn.com

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
楼主: 路路通

《输入法编程漫谈》问答

[复制链接]
发表于 2008-6-19 13:08:51 | 显示全部楼层
除了BabelPad,UltraEdit和EmEditor,似乎都比较另类,光标位置不按规范处理。可以测试看。

讨论取得字号,不就是为了做到微软那样的效果(不是指他的输入法输入方式)。
这种显示效果当然有很多好处,每个输入法,都可以善用它。所见即所得嘛。
 楼主| 发表于 2008-6-19 13:24:07 | 显示全部楼层
原帖由 谢振斌 于 2008-6-19 13:08 发表
除了BabelPad,UltraEdit和EmEditor,似乎都比较另类,光标位置不按规范处理。可以测试看。

讨论取得字号,不就是为了做到微软那样的效果(不是指他的输入法输入方式)。
这种显示效果当然有很多好处,每个输入法 ...


试了一下,可以跟踪光标,但找不到字体信息,具体原因待进一步查找。搜狗、紫光6还可以跟踪光标,其余微软、加加5、紫光5、智能狂拼、智能ABC连光标都找不着。
发表于 2008-6-19 13:57:49 | 显示全部楼层
对BabelPad,我这里只有紫光V5 无法跟踪光标。紫光V6没试过。
加加5.0可以跟踪。
 楼主| 发表于 2008-6-21 13:18:04 | 显示全部楼层
原帖由 谢振斌 于 2008-6-19 13:57 发表
对BabelPad,我这里只有紫光V5 无法跟踪光标。紫光V6没试过。
加加5.0可以跟踪。


对BabelPad跟踪了一下,用MFC做的,比较难伺候,关键是输入法发送字串之后,它才将自己的字体选入,这个先后顺序让输入法无法实时获得她调用的字体,除非用些非常手段,否则看来是没戏了。
 楼主| 发表于 2008-6-22 12:49:45 | 显示全部楼层
原帖由 求实—求知 于 2008-6-21 22:40 发表
输入法用哪种程序编程比较好?C、C++、B、J(java)?


在PC上最流行的是C,也有用C++的。
求兄近来忙于咬文嚼字,怎么会有空关注输入法编程?

[ 本帖最后由 路路通 于 2008-6-22 12:56 编辑 ]
发表于 2008-6-26 14:47:55 | 显示全部楼层

请教

我想写一个类似“火星文输入法”的输入法外挂,但目的不是输出火星文,而是输出汉语拼音,请教楼主应该拦截哪些消息以及怎么修改输出的内容?
 楼主| 发表于 2008-6-26 17:52:22 | 显示全部楼层
原帖由 lhcwjy 于 2008-6-26 14:47 发表
我想写一个类似“火星文输入法”的输入法外挂,但目的不是输出火星文,而是输出汉语拼音,请教楼主应该拦截哪些消息以及怎么修改输出的内容?


很抱歉,对火星文没有研究,帮不上你的忙。
外挂输入法拦截的是键盘消息,安装一个全局键盘钓子就可以。
发表于 2008-6-27 09:03:28 | 显示全部楼层
我已经做了一个全局勾子,勾住WM_IME_COMPOSITION消息后可用ImegetCompositionString函数得到汉字,问题是把汉字转成拼音后,如何把它写回去,我看到有个ImeSetCompositionString函数,试了试,但没有效果,我对输入法的内部机制不是很了解,我的问题是在什么地方能以符合输入法规范的方法把拼音信息写回去,而不是用wm_settext之间的方法
 楼主| 发表于 2008-6-27 11:08:20 | 显示全部楼层
原帖由 lhcwjy 于 2008-6-27 09:03 发表
我已经做了一个全局勾子,勾住WM_IME_COMPOSITION消息后可用ImegetCompositionString函数得到汉字,问题是把汉字转成拼音后,如何把它写回去,我看到有个ImeSetCompositionString函数,试了试,但没有效果,我对输入法 ...

没用过这两个函数,能否把代码贴上来看看?
发表于 2008-8-30 10:01:49 | 显示全部楼层

IME编程,繁体显示不正常.

你好,最近我用IME做输入法编程的时候,遇到这样的问题:在简体版的WINDOW下,输入的汉字显示都正常,但是在繁体版的WINDOW下,有几个汉字显示就不正常.全都显示为?,而且有时还一闪一闪的,这是什么原因引起的,该如何解决.谢谢!
 楼主| 发表于 2008-9-2 21:49:43 | 显示全部楼层

回复 70楼 的帖子

没有用过繁体板的WINDOWS,是什么原因我也不清楚。感觉如果是用UNICODE 应该不会出现你说的问题。
发表于 2008-9-16 15:54:38 | 显示全部楼层
status窗口中有一个“CAPS”按钮,它的作用就是相当于键盘上的Caps Lock键(即可以用鼠标单击代替键盘按键)。请问在 status 中该如何产生(发送)这个键盘消息?谢谢!!!
 楼主| 发表于 2008-9-16 16:47:05 | 显示全部楼层
原帖由 takemoto 于 2008-9-16 15:54 发表
status窗口中有一个“CAPS”按钮,它的作用就是相当于键盘上的Caps Lock键(即可以用鼠标单击代替键盘按键)。请问在 status 中该如何产生(发送)这个键盘消息?谢谢!!!


另一贴9月7号的模版程序有代码。
发表于 2008-9-17 09:36:42 | 显示全部楼层

回复 73楼 的帖子

您的模板程序我在研究(还要再次感谢您的无私奉献,看自由拼音的代码很头疼啊!)。

另一贴9月7号的模版程序有代码。
------------------------------------------------
我只在 imm.c(ImeProcessKey ) 和 uistatus.c(SetIMEStatus) 中找到按下“CAPS LOCK”键时刷新状态窗口的处理逻辑。
我想要做的是在 status 窗口用鼠标单击一次CAPS按钮相当于在键盘上按一次Caps Lock键(也就是 MS IME2003 日文输入法中CAPS和KANA按钮的功能),现在我不知道该怎么在鼠标单击事件中将这个模拟的键盘消息发送出去,如果是用 SendMessage 这个API,那它的 HWND 该用哪个?如果不是,又该怎么处理?谢谢您的指点!
 楼主| 发表于 2008-9-17 17:29:07 | 显示全部楼层
原帖由 takemoto 于 2008-9-17 09:36 发表
您的模板程序我在研究(还要再次感谢您的无私奉献,看自由拼音的代码很头疼啊!)。

另一贴9月7号的模版程序有代码。
------------------------------------------------
我只在 imm.c(ImeProcessKey ) 和 ui ...


用keybd_enent或Sendinput模拟键盘事件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大中文系 ( 京ICP备12040209号

GMT+8, 2016-3-24 20:40 , Processed in 0.119829 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表