Как Windows связывает значки с файлами в оболочке проводника? - PullRequest
2 голосов
/ 25 февраля 2010

У меня установлены как InDesign CS2, так и CS3.Оба используют файлы с расширением .indd.Как Windows узнает, какой значок использовать?Он использует правильные значки, то есть файлы CS2 имеют значок cs2, а файлы CS3 имеют значок CS3.

Как Windows знает, как это сделать?

И как извлечь или использовать эту систему обнаружения версийв моих программах?

Редактировать:

Спасибо за ваши ответы shell-extension-icon-handler.Что-то новое для меня.Но можно ли каким-либо образом подключиться к IconHandler, который предоставляет InDesign, и использовать его для определения версии файла InDesign?

Ответы [ 3 ]

5 голосов
/ 25 февраля 2010

Вам нужно написать расширение оболочки Icon Handler. См. Документацию MSDN для IExtractIcon. Основной механизм заключается в том, что вы создаете расширение оболочки и регистрируете обработчик значков для нужного вам типа файла (смотрите HKEY_CLASSES_ROOT / .indd), а затем оболочка загружает ваш обработчик, передает информацию о файле и запрашивает значок в ответ. Существует также метод IExtractImage , если вы хотите предоставить миниатюру растрового изображения, а не просто значок.

Обратите внимание, что вы должны быть особенно осторожны при написании обработчиков расширений оболочки, поскольку любые утечки или сбои памяти могут привести к срыву проводника и любых других приложений, отображающих диалог открытия / сохранения файла.

2 голосов
/ 25 февраля 2010

Для некоторых файлов это HKEY_CLASSES_ROOT\<file extension here>\DefaultIcon запись в реестре, но большинство файлов отображаются на более понятное имя, например, .pdf\(Default) -> AcroExch.Document (если установлен Adobe Reader).

В этом случае вам нужно пройти по реестру до AcroExch.Document и увидеть, что либо

  • DefaultIcon прямо здесь или
  • AcroExch.Document\CLSID\(Default) - это некоторый GUID. Затем следуйте HKEY_CLASSES_ROOT\CLSID\<insert that guid here>, и вы заметите, что этот ключ содержит DefaultIcon

... и DefaultIcon - это то место, откуда загружается значок.

Надеюсь, это было достаточно ясно;) Я не знаю о вашем особом случае, но в реестре должно быть различие.

1 голос
/ 25 февраля 2010

Он почти наверняка устанавливает обработчик расширения иконки оболочки . Писать собственные и , зная, как определить версию в формате файла, который не задокументирован или не документирован, довольно сложно.

...