셸 확장을 사용하여 아이콘 및 상황에 맞는 메뉴 추가
참고
Windows Desktop Search 2.x는 원래 Windows XP 및 Windows Server 2003용 추가 기능으로 사용할 수 있었던 사용되지 않는 기술입니다. 이후 릴리스에서는 Windows Search 를 대신 사용합니다.
셸 확장을 구현하여 Microsoft WDS(Windows Desktop Search) 및 프로토콜 처리기를 사용하여 사용자의 환경을 개선할 수 있습니다. 추가 확장이 없으면 만든 프로토콜 처리기에는 다음 사용자 환경이 포함되지 않습니다.
- WDS는 결과에 대한 특정 아이콘을 표시하지 않습니다.
- 사용자가 항목을 두 번 클릭하면 사용자 인터페이스가 이벤트에 응답하지 않습니다.
- 사용자가 항목을 마우스 오른쪽 단추로 클릭하면 상황에 맞는 메뉴가 항목에 대한 작업을 지원하지 않습니다.
IPersist 및IPersistFolder의 최소 구현은 IShellFolder에 필요하며, 보다 원활한 사용자 환경을 제공하는 두 인터페이스인 IContextMenu 및 IExtractIcon에는 IShellFolder의 최소 구현이 필요합니다.
IPersist
IPersist 인터페이스는 시스템에 영구적으로 저장할 수 있는 개체의 CLSID를 제공하도록 설계된 단일 메서드 GetClassID를 정의합니다.
메서드 | 설명 |
---|---|
GetClassID() | 프로토콜 처리기의 ClassID를 반환합니다. |
참고
IPersist, IPersistFolder 및 IShellFolder에 대해 동일한 CLSID를 구현해야 합니다.
IPersistFolder
IPersistFolder 인터페이스는 Shell 폴더 개체를 초기화하는 데 사용됩니다. IPersist에서 파생된 이 인터페이스의 구현은 폴더가 셸 네임스페이스에 있는 위치를 나타내는 방법입니다.
메서드 | 설명 |
---|---|
Initialize() | Shell 폴더 개체가 전달된 정보에 따라 자신을 초기화하도록 지시하고 S_OK |
참고
IPersist, IPersistFolder 및 IShellFolder에 대해 동일한 CLSID를 구현해야 합니다.
이 인터페이스는 직접 사용하지 않습니다. 셸 폴더 개체를 초기화할 때 IShellFolder::BindToObject 인터페이스의 파일 시스템 구현에서 사용됩니다.
IShellFolder
IShellFolder 인터페이스는 폴더를 관리하는 데 사용되며 프로토콜 처리기에 대해 구현된 아이콘 및 컨텍스트 인터페이스가 Windows 데스크톱 검색 결과 사용자 인터페이스에서 올바르게 작동하도록 부분 구현이 필요합니다. 필요한 대부분의 기능은 GetUIObjectOf 메서드를 통해 노출됩니다. 이 메서드를 사용하면 추가 기능에서 IExtractIcon 및 IContextMenu 인터페이스를 쿼리할 수 있습니다.
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, IPersistFolder 및 IShellFolder에 대해 동일한 CLSID를 구현해야 합니다.
IShellFolder 는 폴더를 열거하는 데 사용되지 않습니다. 즉, 폴더의 표시 이름은 실제 URL이 됩니다. 이는 나중에 변경될 수 있습니다.
IContextMenu
WDS가 사용자에게 결과를 표시하면 사용자는 항목을 마우스 오른쪽 단추로 클릭하고 IContextMenu 인터페이스로 정의된 상황에 맞는 메뉴를 볼 수 있습니다.
상황에 맞는 메뉴의 기본 작업은 항목을 두 번 클릭할 때 수행되는 것과 동일한 작업입니다. 항목에 해당하는 IShellFolder 또는 IContextMenu 인터페이스가 없으면 두 번 클릭 이벤트의 기본 동작은 URL을 ShellExecute 함수에 인수로 전달하는 것입니다.
IExtractIcon
IExtractIcon 은 프로토콜 처리기에서 제공하는 PIDL의 URL을 기반으로 WDS 사용자 인터페이스에 대한 아이콘을 검색합니다.
코드 예제
사용자 지정 프로토콜 처리기 사용자 인터페이스 샘플 코드는 IShellFolder 구현 및 지원 인터페이스를 보여 줍니다. 여기에는 PIDL 조작에 대한 지원이 포함됩니다.
관련 항목