2014-01-07 11 views
1

서버의 파일을 가상보기로 제공하는 네임 스페이스 확장을 개발 중입니다. 이보기에서 필자는 오버레이 아이콘을 사용하여 파일의 여러 상태 (사용, 오프라인, 동기화 불능 등)를 제공해야합니다.네임 스페이스 확장을위한 아이콘 오버레이 처리기

오버레이 처리기를 구현하는 기사를 통해 읽었으며 IShellIconOverlayIdentifier 인터페이스를 구현하는 오버레이 처리기 중 하나에서이 문제를 처리하려고합니다.

IShellIconOverlayIdentifier :: IsMemberOf()를 참조하고 다른 함수는 일반 파일 시스템 (예 : c : \, d : \ 등)에 액세스 할 때만 호출됩니다. 네임 스페이스 확장을 찾아 볼 때이 호출은 전혀 불렀다. 왜 그런가요? 네임 스페이스 확장에서 객체의 오버레이를 구현하려면 어떻게해야합니까?

관련, 마두

답변

2

오버레이 아이콘을 추가하는 유일한 방법은 NSE에서 IShellIconOverlay을 구현합니다. 그러나 IShellIconOverlay.GetOverlayIndex 및 IShellIconOverlay.GetOverlayIconIndex는 SHELL 이미지 목록에서받은 아이콘을 반환해야합니다. SHGetIconOverlayIndex 함수를 사용하여 셸 이미지 목록의 오버레이 아이콘을받을 수 있습니다. 그리고 쉘 이미지 목록에 추가 오버레이 아이콘을 추가하는 방법은 입니다.입니다.

링크 또는 공유 아이콘과 같은 표준 오버레이 아이콘을 사용하려면 SHGetIconOverlayIndex를 사용하십시오. 그러나 사용자 정의 아이콘을 사용하려면 "해킹"을 사용해야합니다. 해킹은 간단한 추가 오버레이 셸 확장입니다. 오버레이 셸 확장 만 셸 이미지 목록에 추가 오버레이 아이콘을 추가 할 수 있습니다. IShellIconOverlayIdentifier.GetOverlayInfo에서 아이콘과 인덱스 IShellIconOverlayIdentifier를 반환합니다 .IsMemberOf는 항상 S_FALSE를 반환합니다. IShellIconOverlay_GetOverlayIndex의 NSE에서 아이콘과 인덱스를 사용하여 SHGetIconOverlayIndex를 호출합니다.

NSE overlay icon

당신은 모든 아이콘에 대해 별도의 오버레이 셸 확장을 사용해야합니다. 그러나 Windows에는 시스템에 등록 된 오버레이 쉘 확장의 최대 개수 제한이 있다는 것을 잊지 마십시오. 정확한 숫자는 기억이 나지 않지만 약 15입니다.