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