다음을 통해 공유


셸 확장을 사용하여 아이콘 및 상황에 맞는 메뉴 추가

참고

Windows Desktop Search 2.x는 원래 Windows XP 및 Windows Server 2003용 추가 기능으로 사용할 수 있었던 사용되지 않는 기술입니다. 이후 릴리스에서는 Windows Search 를 대신 사용합니다.

셸 확장을 구현하여 Microsoft WDS(Windows Desktop Search) 및 프로토콜 처리기를 사용하여 사용자의 환경을 개선할 수 있습니다. 추가 확장이 없으면 만든 프로토콜 처리기에는 다음 사용자 환경이 포함되지 않습니다.

  • WDS는 결과에 대한 특정 아이콘을 표시하지 않습니다.
  • 사용자가 항목을 두 번 클릭하면 사용자 인터페이스가 이벤트에 응답하지 않습니다.
  • 사용자가 항목을 마우스 오른쪽 단추로 클릭하면 상황에 맞는 메뉴가 항목에 대한 작업을 지원하지 않습니다.

IPersist 및IPersistFolder의 최소 구현은 IShellFolder에 필요하며, 보다 원활한 사용자 환경을 제공하는 두 인터페이스인 IContextMenuIExtractIcon에는 IShellFolder의 최소 구현이 필요합니다.

 

IPersist

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

메서드 설명
GetClassID() 프로토콜 처리기의 ClassID를 반환합니다.

 

참고

IPersist, IPersistFolderIShellFolder에 대해 동일한 CLSID를 구현해야 합니다.

 

 

IPersistFolder

IPersistFolder 인터페이스는 Shell 폴더 개체를 초기화하는 데 사용됩니다. IPersist에서 파생된 이 인터페이스의 구현은 폴더가 셸 네임스페이스에 있는 위치를 나타내는 방법입니다.

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

 

참고

IPersist, IPersistFolderIShellFolder에 대해 동일한 CLSID를 구현해야 합니다.

 

이 인터페이스는 직접 사용하지 않습니다. 셸 폴더 개체를 초기화할 때 IShellFolder::BindToObject 인터페이스의 파일 시스템 구현에서 사용됩니다.

 

IShellFolder

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

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

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

메서드 Description
BindToObject() E_NOTIMPL 반환
BindToStorage() E_NOTIMPL 반환
CreateViewObject() E_NOTIMPL 반환
SetNameOf() E_NOTIMPL 반환
ParseDisplayName() URL을 PIDL 구조체로 변환합니다.
CompareIDs() 두 PIDL 값 비교
GetDisplayNameOf() PIDL의 URL을 반환합니다.
GetUIObjectOf() 이 메서드는 OLE COM QueryInterface 메서드와 비슷합니다. 아이콘이 요청되면 호출자가 IID_IExtractIcon 요청합니다. 상황에 맞는 메뉴가 요청되면 호출자는 IID_IContextMenu 요청합니다.

 

참고

IPersist, IPersistFolderIShellFolder에 대해 동일한 CLSID를 구현해야 합니다.

 

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

 

IContextMenu

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

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

 

IExtractIcon

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

 

코드 예제

사용자 지정 프로토콜 처리기 사용자 인터페이스 샘플 코드IShellFolder 구현 및 지원 인터페이스를 보여 줍니다. 여기에는 PIDL 조작에 대한 지원이 포함됩니다.

참조

사용자 지정 프로토콜 처리기 사용자 인터페이스 샘플 코드

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