文本服务注册

除了标准 COM 程序内服务器注册表项外,文本服务还必须将自身注册到文本服务框架 (TSF) ,以便它可以与应用程序一起使用。 TSF 提供 ITfInputProcessorProfilesITfCategoryMgr 接口来简化注册过程。

文本服务提供商还应提供数字签名及其二进制可执行文件。 请参阅 代码签名简介

注册文本服务

文本服务通过使用文本服务的类标识符调用 ITfInputProcessorProfiles::Register 来向 TSF 注册自身。 通过使用 CLSID_TF_InputProcessorProfiles 调用 CoCreateInstance 来获取 ITfInputProcessorProfiles 接口的实例。

以下示例演示如何创建 ITfInputProcessorProfiles 对象并注册文本服务。

BOOL RegisterTextService(CLSID clsidTextService)
{
    HRESULT hr;
    ITfInputProcessorProfiles *pInputProcessProfiles;

    hr = CoCreateInstance(  CLSID_TF_InputProcessorProfiles, 
                            NULL, 
                            CLSCTX_INPROC_SERVER,
                            IID_ITfInputProcessorProfiles, 
                            (LPVOID*)&pInputProcessProfiles);

    if (hr != S_OK)
    {
        return FALSE;
    }

    hr = pInputProcessProfiles->Register(clsidTextService);

    pInputProcessProfiles->Release();
    
    return (S_OK == hr);
}

ITfInputProcessorProfiles::Unregister

注册语言配置文件

仅当应用程序具有焦点并在语言栏中选择了正确的语言时,文本服务才可用。 为了方便实现此要求,TSF 要求文本服务为自己支持的所有语言注册自身。 文本服务通过调用 ITfInputProcessorProfiles::AddLanguageProfile 来注册其语言配置文件,其中包含文本服务类标识符、配置文件的语言标识符以及标识语言配置文件的文本服务定义的 GUID

可以通过调用 ITfInputProcessorProfiles::RemoveLanguageProfile 删除语言配置文件。 ITfInputProcessorProfiles::Unregister 删除文本服务的所有语言配置文件;卸载文本服务时,它确实需要删除各个语言配置文件。

注册类别

文本服务还必须注册文本服务所应用到的类别。 例如,如果文本服务提供显示属性信息,则它必须通过使用第一个参数的文本服务的类标识符调用 ITfCategoryMgr::RegisterCategory ,为第二个参数GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER,并为第三个参数再次调用文本服务的类标识符,将自身注册为显示属性提供程序。 可能的类别在 “预定义的类别值”下列出。

通过调用 ITfCategoryMgr::UnregisterCategory 删除以前注册的类别。 ITfInputProcessorProfiles::Unregister 删除文本服务的所有类别;卸载文本服务时,必须删除各个类别。