다음을 통해 공유


아이콘 처리기를 만드는 방법

파일 형식에는 Windows 탐색기에서 해당 멤버를 쉽게 인식할 수 있도록 연결된 사용자 지정 아이콘이 있는 경우가 많습니다. 사용자 지정 아이콘을 파일 형식에 할당하는 가장 간단한 방법은 아이콘의 파일을 등록하는 것입니다. 그러나 이러한 방식으로 등록된 아이콘은 파일 형식의 모든 멤버에 대해 동일합니다. 아이콘 처리기구현하여 파일 형식의 멤버에 아이콘을 훨씬 더 유연하게 할당할 수 있습니다.

아이콘 처리기는 파일 형식의 멤버에 아이콘을 동적으로 할당할 수 있는 Shell 확장 처리기의 형식입니다. 형식의 파일이 표시될 때마다 셸은 처리기에서 적절한 아이콘을 쿼리합니다. 예를 들어 아이콘 처리기는 파일 형식의 다른 멤버에 다른 아이콘을 할당하거나 파일의 현재 상태에 따라 아이콘을 변경할 수 있습니다.

셸 확장 처리기를 구현하고 등록하는 일반적인 절차는 셸 확장 처리기 만들기설명합니다. 이 문서에서는 아이콘 처리기와 관련된 구현의 이러한 측면에 중점을 둡니다.

지시

1단계: 아이콘 처리기 구현

모든 셸 확장 처리기와 마찬가지로 아이콘 처리기는 DLL로 구현되는 COM(In-process Component Object Model) 개체입니다. 두 개의 인터페이스, IUnknown에 추가하여, IPersistFileIExtractIcon를 내보내야 합니다.

셸은 IPersistFile 인터페이스를 통해 처리기를 초기화합니다. 이 인터페이스를 사용하여 CLSID(처리기의 클래스 식별자)를 요청하고 파일 이름을 제공합니다. 나머지 작업은 IExtractIcon 인터페이스를 통해 수행됩니다. IPersistFile 인터페이스를 포함하여 셸 확장 처리기를 구현하는 방법에 대한 일반적인 내용은 셸 확장 처리기 만들기참조하세요. 이 문서의 나머지 부분에서는 IExtractIcon 인터페이스를 구현하는 방법에 대해 설명합니다.

2단계: IExtractIcon 인터페이스 구현

인터페이스가 초기화되면 셸은 처리기의 IExtractIcon 인터페이스를 사용하여 적절한 아이콘을 요청합니다. 인터페이스에는 두 가지 메서드가 있습니다. IExtractIcon::GetIconLocationIExtractIcon::Extract.

아이콘은 파일 시스템의 위치로 식별됩니다. 이 정보를 요청하기 위해 IExtractIcon::GetIconLocation 메서드가 호출됩니다. szIconFile 매개 변수를 파일 이름으로 설정합니다. 파일에 둘 이상의 아이콘이 있는 경우 piIndex 아이콘의 인덱스로 설정합니다. 두 플래그 변수에 적절한 값을 할당합니다. 파일 이름을 지정하지 않거나 셸에서 아이콘을 추출하지 않으려면 pwFlags 매개 변수에서 GIL_NOTFILENAME 플래그를 설정합니다. szIconFile값을 할당할 필요는 없지만 셸이 IExtractIcon::Extract호출할 때 처리기는 아이콘 핸들을 제공해야 합니다.

파일 이름을 반환하는 경우 셸은 일반적으로 해당 캐시에서 아이콘을 로드하려고 시도합니다. 캐시된 아이콘의 로드를 방지하려면 pwFlags 매개 변수에서 GIL_DONTCACHE 플래그를 설정합니다. 캐시된 아이콘이 로드되지 않으면 셸은 IExtractIcon::Extract 호출하여 아이콘 핸들을 요청합니다.

IExtractIcon::GetIconLocation에서 파일 및 인덱스가 지정된 경우, 해당 파일과 인덱스가 각각 pszFilenIconIndex 매개 변수로 IExtractIcon::Extract에 전달됩니다. 파일 이름이 제공되면 처리기가 S_FALSE 반환하여 셸에서 아이콘을 추출할 수 있습니다. 그렇지 않으면 처리기가 크고 작은 아이콘을 추출하거나 생성해야 하며, 해당 HICON 핸들을 phiconLargephiconSmall 매개 변수에 할당해야 합니다. 셸은 해당 캐시에 아이콘을 추가하여 처리기에 대한 후속 호출을 신속하게 처리합니다.

3단계: 아이콘 처리기 등록

파일 형식아이콘 정적으로 등록할 경우 파일 형식에 대한 ProgID 아래에 DefaultIcon 하위 키를 만듭니다. 기본값은 아이콘이 포함된 파일로 설정됩니다. 아이콘 처리기를 등록하려면 DefaultIcon 하위 키가 있어야 하지만 기본값은 "%1"로 설정해야 합니다. ProgID 하위 키의 Shellex 하위 키에 IconHandler 하위 키를 추가하고 해당 기본값을 처리기의 CLSID GUID 문자열 형식으로 설정합니다. 셸 확장 처리기를 등록하는 방법에 대한 일반적인 내용은 셸 확장 처리기 만들기를 참조하세요.

다음 예제에서는 이제 .myp 파일 형식이 정적으로 정의된 아이콘 대신 바로 가기 메뉴 처리기를 사용할 수 있도록 아이콘 사용자 지정 레지스트리 항목을 수정합니다.

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
   MyProgram.1
      (Default) = MyProgram Application
      DefaultIcon
         (Default) = %1
      Shellex
         IconHandler
            (Default) = {The handler's CLSID GUID}

셸 확장 처리기를 만들기

IPersistFile

IExtractIcon