Share via


아이콘, 미리 보기 및 바로 가기 메뉴 추가

검색 중에 데이터가 인덱싱되고 사용자에게 올바르게 표시되도록 하려면 셸 데이터 저장소( 셸 네임스페이스 확장이라고도 함) 및 파일 형식 처리기(셸 확장명, 확장 처리기 또는 셸 확장 처리기라고도 함)를 구현해야 합니다.

이 항목에서는 다음 인터페이스에 대해 설명합니다.

파일 형식 처리기 구현

이러한 셸 확장명 또는 파일 형식 처리기는 사용자에게 다음과 같은 셸 환경을 제공합니다.

  • 결과 보기에는 항목 유형에 대한 특정 아이콘이 표시됩니다.
  • 결과 보기는 사용자가 항목을 선택할 때 항목의 미리 보기를 표시합니다.
  • 사용자는 항목을 두 번 클릭하여 파일 열기와 같은 이벤트를 시작할 수 있습니다.
  • 사용자는 항목을 마우스 오른쪽 단추로 클릭하여 바로 가기(상황에 맞는) 메뉴에 액세스할 수 있습니다.
  • 사용자는 항목을 끌어서 놓을 수 있습니다.

모든 COM(구성 요소 개체 모델) 개체와 마찬가지로 파일 형식 처리기는 IUnknown 인터페이스 및 클래스 팩터리를 구현해야 합니다.

Windows XP 이전 버전에서도 처리기는 다음을 구현해야 합니다.

Windows Vista에서 IPersistFile 인터페이스IShellExtInit 인터페이스 는 처리기를 초기화하기 위해 Shell에 대한 다음 세 가지 인터페이스로 대체되었습니다.

합리적인 사용자 환경을 제공하려면 프로토콜 처리기를 사용하여 Shell 데이터 저장소를 제공해야 합니다. 그런 다음, 해당 데이터 저장소는 아이콘 처리기, 바로 가기 메뉴 처리기, 미리 보기 처리기 등에 대한 "팩터리"로 사용됩니다. IPersist 인터페이스IPersistFolder 인터페이스의 최소 구현은 IShellFolder 인터페이스에 필요하며 IContextMenuIExtractIcon에는 최소 IShellFolder 인터페이스 구현이 필요합니다.

참고

IPersist, IPersistFolderIShellFolder에 대해 동일한 CLSID(클래스 식별자)를 구현해야 합니다.

 

프로토콜 처리기를 지원하는 Shell 데이터 저장소를 만드는 방법에 대한 자세한 내용은 기본 폴더 개체 인터페이스 구현을 참조하세요.

IPersist

IPersist 인터페이스는 시스템에 영구적으로 저장할 수 있는 개체의 CLSID를 제공하도록 설계된 단일 메서드 GetClassID를 정의합니다.

메서드 설명
GetClassID Shell 데이터 저장소 개체의 CLSID를 반환합니다.

 

IPersistFolder

IPersistFolder 인터페이스는 Shell 폴더 개체를 초기화하는 데 사용됩니다. IPersist에서 파생된 이 인터페이스의 구현은 폴더가 셸 네임스페이스에 있는 위치를 나타내는 방법입니다. 이 인터페이스는 직접 사용하지 않습니다. 셸 폴더 개체를 초기화할 때 IShellFolder::BindToObject 메서드 의 파일 시스템 구현에서 사용됩니다.

메서드 Description
Initialize Shell 폴더 개체가 전달된 정보에 따라 자신을 초기화하도록 지시하고 S_OK

 

IShellFolder

IShellFolder 인터페이스 인터페이스는 폴더를 관리하는 데 사용되며, 프로토콜 처리기에 대해 구현된 아이콘 및 컨텍스트 인터페이스가 Windows Search 결과 사용자 인터페이스에서 올바르게 작동하도록 부분 구현이 필요합니다. 필요한 대부분의 기능은 GetUIObjectOf 메서드를 통해 노출됩니다. 이 메서드를 사용하면 추가 기능에서 IExtractIconIContextMenu 인터페이스를 쿼리할 수 있습니다.

IShellFolder 인터페이스 인터페이스는 URL 대신 PIDL을 사용합니다. 전체 Shell 데이터 저장소의 요구 사항과 달리 추가 기능은 URL만 포함하는 간단한 IDL 구조를 사용할 수 있습니다.

IShellFolder 인터페이스의 다음 메서드를 구현해야 합니다. 이러한 메서드 중 5개에는 최소한의 구현이 필요합니다.

메서드 설명
BindToObject E_NOTIMPL 반환
BindToStorage E_NOTIMPL 반환
CreateViewObject E_NOTIMPL 반환
SetNameOf E_NOTIMPL 반환
ParseDisplayName URL을 PIDL 구조체로 변환합니다.
CompareIDs 두 PIDL 값 비교
GetDisplayNameOf PIDL의 URL을 반환합니다.
GetUIObjectOf 이 메서드는 IUnknown::QueryInterface 메서드와 비슷합니다. 아이콘이 요청되면 호출자가 IID_IExtractIcon 요청합니다. 바로 가기 메뉴가 요청되면 호출자가 IID_IContextMenu

 

IShellFolder 는 폴더를 열거하는 데 사용되지 않습니다. 즉, 폴더의 표시 이름은 실제 URL이 됩니다. 이는 나중에 변경될 수 있습니다.

IContextMenu

Windows Search에서 사용자에게 결과를 표시하면 사용자가 항목을 마우스 오른쪽 단추로 클릭하고 IContextMenu 인터페이스에서 정의한 바로 가기 메뉴를 볼 수 있습니다. 바로 가기 메뉴를 상황에 맞는 메뉴라고도 합니다.

상황에 맞는 메뉴의 기본 작업은 항목을 두 번 클릭할 때 수행되는 것과 동일한 작업입니다. 항목에 해당하는 IShellFolder 또는 IContextMenu 인터페이스가 없으면 두 번 클릭 이벤트의 기본 동작은 URL을 ShellExecute 함수 함수에 인수로 전달하는 것입니다.

바로 가기 메뉴 처리기를 만드는 방법에 대한 자세한 내용은 상황에 맞는 메뉴 처리기 만들기샘플 코드에 대한 샘플: 프로토콜 처리기의 셸 확장을 참조하세요 .

IExtractIcon

IExtractIcon 은 프로토콜 처리기에서 제공하는 PIDL의 URL을 기반으로 Windows Search 사용자 인터페이스에 대한 아이콘을 검색합니다.

아이콘 처리기 만들기 및샘플: 샘플 코드에 대한 프로토콜 처리기용 셸 확장에 대한 자세한 내용은 아이콘 처리기 만들기를 참조하세요.

IPreviewHandler

IPreviewHandler는 Windows Explorer 선택한 항목의 풍부한 미리 보기를 렌더링합니다. 미리 보기는 Windows Search 4.0 또는 Windows Desktop Search 3.x를 사용하는 Windows Vista에서 사용할 수 있습니다.

사용자 지정 미리 보기 처리기를 만들려면 다음을 수행합니다.

  1. 미리 보기 처리기에 제공된 지침에 따라 IStream을 사용하는 IPreviewHandler를 구현합니다.

  2. 미리 보기 처리기를 등록합니다.

    HKEY_CLASSES_ROOT\<Your_Object_Type>
    
    HKEY_CLASSES_ROOT\<Your_Object_Type>\ShellEx
    
    HKEY_CLASSES_ROOT\<Your_Object_Type>\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f}
       @ = {<Your_PreviewHandler_GUID>}
    
  3. URL에 대한 Shell 폴더를 구현하려면 다음 두 단계를 완료합니다.

    1. 다음 코드 샘플과 같이 IShellFolder::GetUIObjectOf 메서드에서 IQueryAssociations 를 처리하고 셸 항목에 대한 연결을 반환합니다.

      CComPtr<IQueryAssociations> spqa;
      AssocCreate(CLSID_QueryAssociations, __uuidof(IQueryAssociations), &spqa);
      spqa->Init(0, L"Your_Object_Type", NULL, NULL);
      spqa->QueryInterface(riid, ppvReturn);
      
    2. Shell이 데이터 스트림에 대해 Shell 폴더를 쿼리하여 미리 보기 처리기를 초기화한 후 IShellFolder::BindToObject 메서드 메서드 로 이동하여 IID_IStream 처리하고 IStream 을 URL로 반환합니다.

파일 형식에 기존 미리 보기 처리기를 다시 사용하려면 다음 두 단계를 수행합니다.

  1. Your_PreviewHandler_GUID> 대신 <기존 미리 보기 처리기의 CLSID를 사용하여 파일 형식에 대한 미리 보기 처리기를 등록합니다.
  2. Shell 폴더를 구현합니다.

미리 보기 처리기를 만드는 방법에 대한 자세한 내용은 IPreviewHandler미리 보기 처리기를 참조하세요.

추가 리소스

개념

프로토콜 처리기 개발

프로토콜 처리기 이해

변경 내용 인덱스 알림

코드 샘플: 프로토콜 처리기용 셸 확장

프로토콜 처리기 설치 및 등록

프로토콜 처리기에 대한 검색 커넥터 만들기

프로토콜 처리기 디버깅