概述

TSF(Text Service Framework),已经取代IMM(Input Method Manager),成为win8+系统的输入法框架。现在有个需求,触摸屏上要使用软键盘(虚拟键盘,已经有了)输入中文,当需要输入的时候自动弹出软键盘,系统自带的屏幕键盘不能满足需求。尽管网上也有自动弹出软键盘的例子,但是win10上没有测试通过,另外系统自带软键盘的界面风格跟我们的应用程序不符。所以希望自定义的软键盘(不用实现输入法)可以提供候选词列表以及组合字符串。

实现思路

首先想到的是,直接调用TSF接口把一个字符串转换成候选词,主要接口ITfFnSearchCandidateProvider,测试了微软拼音、百度拼音、搜狗拼音以及QQ拼音,只有搜狗拼音可以拿到接口,但却拿不到候选词。想来这个接口对输入法的主要功能没有意义,所以很多输入法没有实现这个接口。

此法不通,另寻他法,从网上看到全屏游戏中经常会隐藏输入法的候选词界面自己提供,需要输入法支持UILess Mode,接着测试了前面的那些输入法,发现它们在win10中都可以隐藏候选词界面,而且除了搜狗(C#下拿不到ITfUIElement接口),其他输入法都可以拿到候选词。使用了GitHub上.Net平台TSF的一个封装TSF.TypeLib

主要接口ITfUIElementSink,当输入法程序需要显示界面时,TSF Manager通过这个接口通知应用程序,应用程序可以选择是否使用输入法提供的候选词界面。

实现步骤如下:

  • 获取ITfThreadMgrEx接口实例;
  • 调用ITfThreadMgrEx::ActivateEx激活输入法,激活标识传入TF_TMAE_UIELEMENTENABLEDONLY;
  • 获取ITfSource接口实例,.Net下通过ITfThreadMgrEx强制转换拿到;
  • 实现ITfUIElementSink接口的三个方法BeginUIElement、UpdateUIElement和EndUIElement,在BeginUIElement中可以通知输入法自定义候选词界面,在UpdateUIElement获取候选词并展现。

候选词拿到了,接着还想在软键盘上显示组合字符串,从网上查到ITfContextOwnerCompositionSink接口可以实现,但是自己测试没有成功,最终使用ITfTextEditSink和ITfThreadMgrEventSink接口拿到,参考了MSDN上的这篇文章

总结

需求实现,明明研究了辣么久,总结下来就这么一丢丢,o(︶︿︶)o 唉,嘿嘿,不管了,反正自己个儿觉着拯救了全世界^O^ ^O^ ~~

栗子在这里o(∩_∩)o

最新文章

  1. c# winform vlcPlayer播放器
  2. iOS开发——UI基础-自定义构造方法,layoutSubviews,Xib文件,利用Xib自定义View
  3. SQL同列合并
  4. jquery unbind bind
  5. E - Trees on the level
  6. 客户端(android,ios)与服务器通信
  7. <video>和<audio>标签
  8. 转:windows下使用gvim搭建简单的IDE编译环境(支持C/C++/Python等)
  9. 转:测试用书(出处:cnblog--liangshi)
  10. 优雅的封装ajax,含跨域
  11. how tomcat works 读书笔记(一)----------一个简单的web服务器
  12. PDF 补丁丁 0.6.0.3427 版发布(修复提取图片问题)
  13. jquery 禁止回车事件响应
  14. Toast不消失问题
  15. HTML+JS+JQuery不可以使用status
  16. hdu 2476"String painter"(区间DP)
  17. 12.11 Daily Scrum
  18. Image Lazy Load:那些延时加载图片的开源插件(jQuery)
  19. error MSB8008: 指定的平台工具集(V120)未安装或无效。
  20. C# 键盘中的按键对应KeyValue

热门文章

  1. ffmpeg常用参数一览
  2. Android应用开发中webview上传文件的几种思路
  3. [转载]Matlab中fft与fftshift命令的小结与分析
  4. HDU 5794 - A Simple Nim
  5. Ubuntu安装中文字体
  6. MYSQL5.6数据库ZIP安装以及VS中使用注意事项
  7. isNUll ,对于sql中的一个表的description的NULL和空格的处理
  8. HTML5 Web存储(Web Storage)技术及用法
  9. 模块化开发,SesJS简单总结
  10. [汇编语言]-第五章[bx]和loop指令