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

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

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

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

지침

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

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

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

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

인터페이스가 초기화되면 Shell은 처리기의 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 매개 변수에 할당해야 합니다. Shell은 캐시에 아이콘을 추가하여 처리기에 대한 후속 호출을 신속하게 처리합니다.

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

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

다음 예제에서는 .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