当前位置:编程学习 > C#/ASP.NET >>

用.NET开发类似输入法的功能

最近接到一个项目是想做一个类似输入法的功能,通过输入拼音检索然后选择相应的记录,最终得到的结果是这条记录的ID。这个其实最简单的的方法是在原有系统中增加拼音检索输入的功能,但是现在拿不到源码而且也为了让这个功能更通用,所以想做成输入法的形式。
1、目前我已经完成了界面上的功能,就是通过拼音检索出现记录列表的功能,是用c#做的。
2、从网上找了一个输入法注入的源码能实现输入法注入,但是是用C写的,而且是基于IME的。
3、现在这两块联系不起来。现在我有两种思路。

一是通过c++.net封装c#类库,然后在C中调用,但是现在貌似碰到了问题,因为对C++和C不是特别熟悉,在调用的时候完全不知道怎么做。

二是把界面通过C++来做,做成非托管的代码,输入法功能也通过实现IME或者TSF接口的形式来写。但是不知道C++在拼音检索和本地数据库访问方面是否方便。

现在这两种思路因为都没有一个非常明确的实现,所以比较迷茫,东一榔头西一棒子的,所以想在这请教一下各位,为我指点下迷津,不胜感激。如果有更好的思路当然更好了。或者给一个参考也可以。

分数全部奉上。谢谢! --------------------编程问答-------------------- 通常不需要考虑“注入”,因为这类概念一开始好像挺时髦、很快你就找不着北了。

比如说你独立封装了两三种文本框Autocomplete功能(或者找到了第三方控件而使用),那么你就在其搜索匹配功能上自定义你自己的查询语句就行了。例如你有一个产品库中有“拼音字头”字段,那么你在处理匹配搜索时将类似
where pid=@x
改为
where pid=@x or pinyin=@x
就行了。你可以为数据库产品表增加一个“拼音字头”字段,并且运行你的程序进行一趟处理为所有记录都添加这个字段值。然后你的新增产品的功能也进行重构,在新增记录时除了别的字段值、同时也写入这个字段值。 --------------------编程问答-------------------- 在简单的地方少搞技术、少费力不讨好地“混乱注入”,你才能把精力用于在真正需要技术来提升实力的地方。 --------------------编程问答--------------------
引用 1 楼 sp1234 的回复:
通常不需要考虑“注入”,因为这类概念一开始好像挺时髦、很快你就找不着北了。

比如说你独立封装了两三种文本框Autocomplete功能(或者找到了第三方控件而使用),那么你就在其搜索匹配功能上自定义你自己的查询语句就行了。例如你有一个产品库中有“拼音字头”字段,那么你在处理匹配搜索时将类似
where pid=@x
改为
where pid=@x or pinyin=@x
就行了。你可以为数据库产品表增加一个“拼音字头”字段,并且运行你的程序进行一趟处理为所有记录都添加这个字段值。然后你的新增产品的功能也进行重构,在新增记录时除了别的字段值、同时也写入这个字段值。


非常感谢,但是我现在是不能够直接操作原来的系统,修改不了代码,那么我的拼音检索功能怎么用到原来系统的文本框上呢。你说的拼音检索功能我已经是实现了,正如你说的,我是把数据库的表同步到本地,然后增加了一个拼音的字段,然后写个小程序处理了一下就ok了。
所以我觉得现在也有点本末倒置了,因为其实核心功能拼音检索的功能我已经很快就实现了,但是就是怎么集成到原有的系统中是个问题,不知道除了做成输入法还有没有其他的方式。输入法也是客户提出的一个概念。

主要就是修改不了原有系统代码,导致我现在很被动。 --------------------编程问答-------------------- 关于输入法这块我在网上搜了很多资料,大体分为两种:一种是比较早起的IME,另一种是最近几年的帖子基本都是说的TSF框架,但是这两种貌似基本都是通过c或c++来调用winapi实现的输入法的功能,我看着有点头大。 --------------------编程问答-------------------- 输入法因为需要注入到不特定进程,不支持使用托管代码编写。 --------------------编程问答--------------------
引用 5 楼 jiangsheng 的回复:
输入法因为需要注入到不特定进程,不支持使用托管代码编写。


哦,谢谢指点。那我应该是用c++来完成这个的编写,不知道输入法的输入窗口和选择窗口是否可以用MFC实现
还有是否是通过COM组件实现输入法还是怎么做,能给介绍一下么,非常感谢。 --------------------编程问答-------------------- 继续求助啊    啊啊 --------------------编程问答-------------------- TSF接口是COM,理论上你可以使用MFC,但是MFC是应用程序框架,对写COM组件的帮助不大。如果你确实需要一个类库作为起点,你应该使用的框架是ATL。

MSDN代码画廊上有TSF代码示例可以参考。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,