Регистрация службы "Текст"
Помимо стандартных записей реестра 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 удаляет все категории для текстовой службы; При удалении текстовой службы необходимо удалить отдельные категории.