TSF自定义候选词列表界面
概述
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
TSF自定义候选词列表界面相关推荐
- ansj 自定义 停用词_构造自定义停用词列表的快速提示
ansj 自定义 停用词 by Kavita Ganesan 通过Kavita Ganesan 构造自定义停用词列表的快速提示 (Quick tips for constructing custom ...
- Jetson TX2 重装系统(刷机)+后续设置(安装Fcitx、解决拼音候选词不显示、换国内源、局域网实现VNC远程桌面)
(珍爱生命,远离TX2!!!) 一.Jetson tx2刷机过程及注意事项 二.安装Fcitx+Googlepinyin 三.解决拼音模式下不显示候选词bug 四.Ubuntu18.04换国内源 五. ...
- 乐鑫Esp32学习之旅16 学习本地语音唤醒离线识别框架 esp-skainet ,如何修改唤醒词? 如何自定义命令词?如何做意图动作?
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...
- jsp自定义图文新闻列表标签结合ssh2,带分页功能
jsp自定义图文新闻列表标签结合ssh2,带分页功能(欢迎大家讨论指点,共同进步) 1.service层 (模拟返回数据) package com.mingda.service.impl;import ...
- 使用jsonp跨域调用百度js实现搜索框智能提示,并实现鼠标和键盘对弹出框里候选词的操作【附源码和在线测试地址】
项目中常常用到搜索,特别是导航类的网站.自己做关键字搜索不太现实,直接调用百度的是最好的选择. 使用jquery.ajax的jsonp方法可以异域调用到百度的js并拿到返回值,当然$.getScrip ...
- blog10 提取候选词的输入文本
2021SC@SDUSC 在上一博客中,参数text_obj代表了我们想要提取候选词的输入文档,这些定义在input_representation.py文件中的class InputTextObj中, ...
- 翻译www.djangobook.com之第十八章:自定义Django的admin界面
[color=red][b]The Django Book:第18章 自定义Django的admin界面[/b][/color] 第6章介绍了Django的admin界面,现在是回过头来仔细看看这个的 ...
- QT自定义精美换肤界面
QT自定义精美换肤界面 陆陆续续用QT开发过很多项目,也用QT写过不少私活项目,也写过N个工具,一直梦寐以求能像VC一样可以很方便的有个自定义的界面,QSS的强大让我看到了很好的希望,辗转百度谷歌无数 ...
- 配置Fcitx输入法的云输入功能 Fcitx候选词框显示省略号的解决办法
配置Fcitx输入法的云输入功能 候选词框显示省略号的原因 在使用Fcitx输入中文的时候,经常能看到候选词的第二个或者第三个显示为省略号,这个省略号其实是Fcitx的云适配候选词.因为Fcitx默认 ...
- NLP-文本处理:拼写纠错【非词(编辑距离)、真词(编辑距离...)候选词 -> “噪音通道模型”计算候选词错拼成待纠错词的似然概率 -> N-gram模型评估候选词组成的语句合理性】
一.贝叶斯公式 1.单事件 P(Ax∣B)P(A_x|B)P(Ax∣B)=P(AxB)P(B)=P(B∣Ax)×P(Ax)P(B)=P(B∣Ax)×P(Ax)∑i=0n[P(B∣Ai)∗P(Ai)] ...
最新文章
- 2、Android应用程序基本特性
- Mac上安装hadoop
- 根据当前系统日期求出本周,本月,本年,上周,上月,上年的第一天
- 【考试战报】ORACLE OCP 19C考试通过
- HackerRank Super Six Substrings dp
- jquery全局变量_jQuery源码一个小细节,却很好地体现了性能优化的思想,很优秀...
- [ZJOI2010] 排列计数(dp + 组合数)
- VMware文件共享
- LeetCode 451. 根据字符出现频率排序(map+优先队列)
- DDD分层架构的三种模式
- 实验2linux系统使用,操作系统实验答案-实验2Linux的基本操作及vi的使用(答案)
- Java中将ResultSet结果集转换为List
- 51nod 1099 任务执行顺序
- 悲剧!因Redis分布式锁造成的P0级重大事故,整个项目组被扣了绩效...
- oracle实验7 pl/sql编程基础
- 基于区块链的融合通信初探(一)
- 网站怎么样对接微信公众号,看以下操作
- c语言程序书写遵循的规则,C程序书写时应遵循的规则
- 计算机应用基础——计算机硬件(二)
- 2020年第六届美亚杯个人资格赛题目复现