image.png

转自https://blog.csdn.net/yang1fei2/article/details/118977318

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组件对应的文件地址和线程模型写入到注册表中,效果如下图所示。
注册表地址如下所示:


相关推荐

多多输入法:非编码键(标点符号)顶屏

软件上面的选项:非编码键(标点符号)顶屏配置文件内部显示名字:是否打开非编码按键顶屏=是如果设置为 是当输入c++的时候,可以正常上屏c++否则 输入c的时候 是正常的,但是再输入++的时候,c就没有

输入法编程:获取输入法候选列表

如何在游戏中获取输入法候选列表本文讲述在windows操作系统中如何通过系统提供的输入法接口获取当前输入法的候选列表信息。在全屏游戏或需要自绘输入法候选列表的软件中均需使用此技术。在阅读之前,请务必了

IME输入法编程心得(转载) 1

原文地址:https://www.cnblogs.com/freedomshe/archive/2012/11/30/ime_learning.html自然语言处理的输入法作业成品没有做出来,但不想再

输入法编程之 输入法管理器 输入法上下文

完整的文档参考:https://docs.microsoft.com/zh-cn/windows/win32/intl/input-context "输入上下文" 是由 IMM 维

输入法编程可能用的到的API接口 IME结构

输入法管理器:GetSystemMetrics(82) // 常量: SM_IMMENABLED 确定是否已启用 IMMIME开发就是实现类似“输入法名字.ime”这样一个动态库(编译的时候通常将.

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

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

QQ拼音输入法智能标点设置 左右括号 左右引号 自动补全

打个左括号 自动出来右括号 虽然有时候很方便但是有时候也会感觉这输入法有点多管闲事啊!!!还是需要啥打啥比较好 在属性设置里 其他设置下面有个 智能标点设置的按钮 点开后 根据需要开启或关闭 智能

输入法的注册、安装和卸载

注册输入法输入法的安装和普通应用程序有一个大的区别是,除了复制文件到安装目录、做一些必要的设置外,还需要向Windows系统注册这个输入法。我们前期一篇博文 TSF(Text Service Fram

刷新网页时,提示:您所查找的网页要使用已输入的信息。返回此页可能需要重复已进行的所有操作。是否要继续操作?

在网页中有form表单的时候,只要网页刷新,就会提示您所查找的网页要使用已输入的信息。返回此页可能需要重复已进行的所有操作。是否要继续操作?的确认重新提交表单的提示这个提示只有在你提交过后才会提示如果