原文: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自定义候选词列表界面相关推荐

  1. ansj 自定义 停用词_构造自定义停用词列表的快速提示

    ansj 自定义 停用词 by Kavita Ganesan 通过Kavita Ganesan 构造自定义停用词列表的快速提示 (Quick tips for constructing custom ...

  2. Jetson TX2 重装系统(刷机)+后续设置(安装Fcitx、解决拼音候选词不显示、换国内源、局域网实现VNC远程桌面)

    (珍爱生命,远离TX2!!!) 一.Jetson tx2刷机过程及注意事项 二.安装Fcitx+Googlepinyin 三.解决拼音模式下不显示候选词bug 四.Ubuntu18.04换国内源 五. ...

  3. 乐鑫Esp32学习之旅16 学习本地语音唤醒离线识别框架 esp-skainet ,如何修改唤醒词? 如何自定义命令词?如何做意图动作?

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

  4. jsp自定义图文新闻列表标签结合ssh2,带分页功能

    jsp自定义图文新闻列表标签结合ssh2,带分页功能(欢迎大家讨论指点,共同进步) 1.service层 (模拟返回数据) package com.mingda.service.impl;import ...

  5. 使用jsonp跨域调用百度js实现搜索框智能提示,并实现鼠标和键盘对弹出框里候选词的操作【附源码和在线测试地址】

    项目中常常用到搜索,特别是导航类的网站.自己做关键字搜索不太现实,直接调用百度的是最好的选择. 使用jquery.ajax的jsonp方法可以异域调用到百度的js并拿到返回值,当然$.getScrip ...

  6. blog10 提取候选词的输入文本

    2021SC@SDUSC 在上一博客中,参数text_obj代表了我们想要提取候选词的输入文档,这些定义在input_representation.py文件中的class InputTextObj中, ...

  7. 翻译www.djangobook.com之第十八章:自定义Django的admin界面

    [color=red][b]The Django Book:第18章 自定义Django的admin界面[/b][/color] 第6章介绍了Django的admin界面,现在是回过头来仔细看看这个的 ...

  8. QT自定义精美换肤界面

    QT自定义精美换肤界面 陆陆续续用QT开发过很多项目,也用QT写过不少私活项目,也写过N个工具,一直梦寐以求能像VC一样可以很方便的有个自定义的界面,QSS的强大让我看到了很好的希望,辗转百度谷歌无数 ...

  9. 配置Fcitx输入法的云输入功能 Fcitx候选词框显示省略号的解决办法

    配置Fcitx输入法的云输入功能 候选词框显示省略号的原因 在使用Fcitx输入中文的时候,经常能看到候选词的第二个或者第三个显示为省略号,这个省略号其实是Fcitx的云适配候选词.因为Fcitx默认 ...

  10. 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)] ...

最新文章

  1. 2、Android应用程序基本特性
  2. Mac上安装hadoop
  3. 根据当前系统日期求出本周,本月,本年,上周,上月,上年的第一天
  4. 【考试战报】ORACLE OCP 19C考试通过
  5. HackerRank Super Six Substrings dp
  6. jquery全局变量_jQuery源码一个小细节,却很好地体现了性能优化的思想,很优秀...
  7. [ZJOI2010] 排列计数(dp + 组合数)
  8. VMware文件共享
  9. LeetCode 451. 根据字符出现频率排序(map+优先队列)
  10. DDD分层架构的三种模式
  11. 实验2linux系统使用,操作系统实验答案-实验2Linux的基本操作及vi的使用(答案)
  12. Java中将ResultSet结果集转换为List
  13. 51nod 1099 任务执行顺序
  14. 悲剧!因Redis分布式锁造成的P0级重大事故,整个项目组被扣了绩效...
  15. oracle实验7 pl/sql编程基础
  16. 基于区块链的融合通信初探(一)
  17. 网站怎么样对接微信公众号,看以下操作
  18. c语言程序书写遵循的规则,C程序书写时应遵循的规则
  19. 计算机应用基础——计算机硬件(二)
  20. 2020年第六届美亚杯个人资格赛题目复现

热门文章

  1. 使用jpa报No query defined for that name错误
  2. 百度地图API-自定义图标覆盖物
  3. leetcode56. Merge Intervals
  4. RHCE实验环境虚拟机下载及注意事项
  5. ASV2011中文版本和英文版本的区别
  6. spin_lock的变体
  7. 使用 rtcwake 定时唤醒休眠的linux
  8. warning LNK4099:未找到 PDB 问题解决方案
  9. Linux内核线程(一)
  10. SylixOS armv8 mmu