image.png


TSF 即文本服务框架的英文缩写

微软官方文档(文本服务框架) https://learn.microsoft.com/zh-cn/windows/win32/tsf/text-services-framework



输入法注册

基于TSF框架的输入法其实本质上就是一个COM程序,通过regsvr32.exe进行注册,注册的命令如下所示.

regsvr32.exe  sogou.ime //注册输入法
regsvr32.exe /u sogou.ime //取消注册输入法

1.调用对应的注册回调函数

这里解析一下输入法COM程序的注册流程。在注册输入法的时候,会调用对应的输入法动态库里面的DllRegisterServer()函数,在卸载输入法的时候会调用 DllUnregisterServer()
所以输入法动态库需要导出对应的接口函数

//通过RAII方式初始化
class AutoCOM
{
public:
    BOOL bInit;
    //初始化Com对应的库
     AutoCOM() {
        bInit = FALSE;    
        HRESULT hr = CoInitialize(NULL);
        if (FAILED(hr))
            return;
        bInit = TRUE;
        }
     //卸载对应的Com库
    ~AutoCOM() {
        if (bInit)
            CoUninitialize();
        }
};
//Com组件注册的时候会被调用
STDAPI DllRegisterServer(void)
{
    AutoCOM ac;
    if ((!RegisterTSFServer()) //注册表里面注册输入法的信息,注册之后才能调用
    || (!RegisterProfiles())
    || (!RegisterCategories()))
    {
        DllUnregisterServer();
        return E_FAIL;
    }
    InstallLayout();
    return S_OK;
}

//Com组件被卸载的时候调用
STDAPI DllUnregisterServer(void)
{
    AutoCOM ac;
    UnregisterProfiles();
    UnregisterCategories();
    UnregisterTSFServer();
    UninstallLayout();
    return S_OK;
}

2.注册输入法组件的服务端

RegisterTSFServer()注册输入法的时候,会将对应的输入法的CLSID值,输入法的名称以及输入法Com组件对应的文件地址和线程模型写入到注册表中,效果如下图所示。
注册表地址如下所示:

全文地址:https://blog.csdn.net/yang1fei2/article/details/118977318

相关推荐

基于文本服务框架(tsf)的拼音输入法研究与实现

摘要:目前的输入法大多采用输入法管理器-输入法编辑器(IMM-IME)进行开发,对于微软发布的新型输入法技术―文本服务框架(TSF)的研究一直比较滞后,该文论述了 TSF 的基本构成、主要接口、输入法

64位输入法DLL注 (tsf)方案

微软两种输入法方案XP和XP以前是imm(Input Method Manager)输入方案.xp之后的系统是imm和TSF(Text Service Framework)输入方案.共存. win8

微软输入法tsf sampleIME 源码分析(转载)

类:CCandidateWindow,候选字窗口CCompositionPricessorEngine,拼写引擎CSampleIME,主程序CStringRange, 一个特殊的字符串类 见于 Sam

tsftext services framework)和输入法

1.TSF输入接口IMM-IME架构成熟,稳定,易于实现,在Windows中被广泛使用,甚至在Linux曾大量使用的中文输入接口SCIM中也可以看到IMM-IME的影子。但是由于IMM-IME在操作权

[输入法]tsf框架中预先上屏的字符管理和控制

在TSF框架中有时候我们需要通过框架上屏一些占位字符来进行定位,这时候我们就需要对预先上屏的字符进行管理,以微软的输入法为例图中红框框选出来的部分就是预先上屏的字符。在TSF框架中通过ITfRange

输入法tsf框架候选栏定位研究

在开发输入法应用的时候,我们需要让候选栏时刻跟踪输入光标的位置,来进行输入。但候选栏定位不准,一直会困扰输入法的开发者。windows老的输入法框架imm在部分场景下比如chrome应用中会定位不准,

输入法管理器(IMM)函数大全(Windows CE 5.0)

imm好像要被弃用了 还是研究TSF输入法 吧 ,虽然没啥鸟用了 但是还是搬运一下下吧EnumRegisterWordProc此函数是与一起使用的应用程序定义的回调函数ImmEnumRegisterW

输入法开发基础(一)

输入法作为使用频率最高的软件之一,现有市场已经几乎被搜狗输入法垄断。也正是由于垄断,导致现有的输入法开发项目和开发资料比较少。在这里将自己最近收集的一些内容整理出来,供想做输入法开发的开发人员参考。输

[输入法]Qt实现软键盘

在使用输入法的时候,为了输入一些特殊字符我们往往会用到软键盘和符号大全。符号大全和软件盘是一类程序,主要实现的就是通过界面点击向目标程序输出对应的符号。这里介绍一下如何通过QT编写软键盘类程序,实现软

快速搭建一款输入法(封装输入法引擎)

输入法最核心的是输入法引擎,输入法引擎负责加载和管理输入法配置和输入法的词库,输入法引擎对用户输入的拼音字符串进行处理并返回对应的候选列表。通过引入输入法引擎我们就可以将我们输入法的拼音串转换成对应的