다음을 통해 공유


텍스트 서비스 등록

표준 COM in-proc 서버 레지스트리 항목 외에도 텍스트 서비스는 애플리케이션에서 사용할 수 있도록 TSF(Text Services Framework)에 등록해야 합니다. TSF는 등록 프로세스를 간소화하기 위해 ITfInputProcessorProfilesITfCategoryMgr 인터페이스를 제공합니다.

또한 텍스트 서비스 공급자는 디지털 서명에 이진 실행 파일을 제공해야 합니다. 코드 서명 소개를 참조하세요.

텍스트 서비스 등록

텍스트 서비스는 텍스트 서비스의 클래스 식별자를 사용하여 ITfInputProcessorProfiles::Register 를 호출하여 TSF에 등록합니다. ITfInputProcessorProfiles 인터페이스의 instance CLSID_TF_InputProcessorProfiles 사용하여 CoCreateInstance를 호출하여 가져옵니다.

다음 예제에서는 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는 텍스트 서비스가 지원하는 모든 언어에 대해 자체 등록해야 합니다. 텍스트 서비스는 텍스트 서비스 클래스 식별자, 프로필의 해당 언어 식별자 및 언어 프로필을 식별하는 텍스트 서비스 정의 GUID를 사용하여 ITfInputProcessorProfiles::AddLanguageProfile을 호출하여 해당 언어 프로필을 등록합니다.

ITfInputProcessorProfiles::RemoveLanguageProfile을 호출하여 언어 프로필을 제거할 수 있습니다. ITfInputProcessorProfiles::Unregister 는 텍스트 서비스에 대한 모든 언어 프로필을 제거합니다. 텍스트 서비스가 제거되면 개별 언어 프로필을 제거해야 합니다.

범주 등록

텍스트 서비스는 텍스트 서비스가 적용되는 범주도 등록해야 합니다. 예를 들어 텍스트 서비스에서 표시 특성 정보를 제공하는 경우 첫 번째 매개 변수에 대한 텍스트 서비스의 클래스 식별자를 사용하여 ITfCategoryMgr::RegisterCategory 를 호출하여 표시 특성 공급자로 등록해야 합니다. 두 번째 매개 변수에 대해 GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER 세 번째 매개 변수에 대해 텍스트 서비스의 클래스 식별자를 다시 지정합니다. 가능한 범주는 미리 정의된 범주 값 아래에 나열됩니다.

ITfCategoryMgr::UnregisterCategory를 호출하여 이전에 등록된 범주를 제거합니다. ITfInputProcessorProfiles::Unregister는 텍스트 서비스에 대한 모든 범주를 제거합니다. 텍스트 서비스가 제거되면 개별 범주를 제거해야 합니다.