Поделиться через


Регистрация службы "Текст"

Помимо стандартных записей реестра com in-proc server, текстовая служба должна зарегистрировать себя на платформе текстовых служб (TSF), чтобы она была доступна для использования с приложением. TSF предоставляет интерфейс ITfInputProcessorProfiles и ITfCategoryMgr для упрощения процесса регистрации.

Поставщики текстовых служб также должны предоставлять цифровые подписи со своими двоичными исполняемыми файлами. См. статью Общие сведения о подписывание кода.

Регистрация службы "Текст"

Текстовая служба регистрирует себя в TSF, вызывая ITfInputProcessorProfiles::Register с идентификатором класса текстовой службы. Экземпляр интерфейса ITfInputProcessorProfiles получается путем вызова CoCreateInstance с CLSID_TF_InputProcessorProfiles.

В следующем примере показано, как создать объект 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 удаляет все категории для текстовой службы; При удалении текстовой службы необходимо удалить отдельные категории.