Pull to refresh

Метки в Висте — дубль два

Reading time 2 min
Views 4.3K
Ужаснувшись обилием ненависти из предыдущей статьи, я решил немного скрасить конфуз с метками для пользователей Висты. Ну в самом деле, как-то совсем нехорошо получилось — тем более, что сам давно хотел это сделать, да руки все не доходили…

Итак, встречаем — Tagg!


Что же это такое?
Это — расширение оболочки Windows, позволяющее привязывать к файлу дополнительные свойства. Пока таковых свойств ровно 3 штуки — теги, комментарий и рейтинг. При желании можно было бы добавить и другие, но надо было на чем-то остановиться.

Значения сохраняются в альтернативном NTFS-потоке под названием TaggData, абсолютно незаметны для пользователя и прозрачны для системы. Если только у Вас нету параноидального антивируса, для которого существует скрытая угроза от XML-ки в файловом потоке.

Как это работает?


Для начала библиотека Tagg.dll регистрируется в системе как COM-объект при помощи команды regsvr32 (разумеется, из-под администратора). После чего появляется запись о классе под кодовым названием {09ECDDF2-61C3-4bb6-88C6-70BC292AD0EC}.

Следующий шаг — это указать, какие расширения файлов должны обрабатываться нашим фильтром. К сожалению, в Vista нельзя указать глобальный обработчик свойств для всех файлов, поэтому придется добавить все необходимые расширения в ветку HKLM\Software\Microsoft\Windows\CurrentVersion\PropertySystem\PropertyHandlers. Там уже есть какие-то расширения, так что добавляем по аналогии.
Если для какого-то типа файлов уже зарегистрирован обработчик — не беда. Его CLSID достаточно «переместить» в дополнительном ключе реестра Fallback, а в дефолтном ключе указать наш CLSID — тогда Tagg дополнит существующий набор свойств своими.

Теперь необходимо сказать, где и в каких случаях должно показываться свойство для каждого типа файлов.
B Windows Vista, как и в ее предшественнице, свойства для типов файлов задаются в реестре в виде строки типа «prop:System.ItemType;System.Size;...». Для каждого случая, будь то подсказка, тайл или подробная информация, предусмотрена своя строка со свойствами.
Соответственно, нужно вставить в эти строки свойства, нужные нам — System.Keywords, System.Comment и System.Rating. И тут тоже есть подстава — эти строки тоже весьма разбросаны по реестру. Вот, например, основные места в порядке приоритета — HKCR\SystemFileAssociation, HKCR, HKCR\*. Так что придется немного попотеть, выискивая нужное место… (hint: при желании можно написать утилиту для этого ;) )

Хватит слов!


Для примера добавим теги к png-файлу.
Итак, начнем с привязки к расширению.

Как видно, у него уже был обработчик, поэтому старый перенесен в Fallback.
Теперь немного изменим строку свойств для preview-а…

и… вуаля!

Можно менять и добавлять теги…

… группировать и фильтровать по ним…

… искать и раскладывать (до сих пор не знаю, как тут правильно перевести «stack»)…


Также они замечательно интегрируются в существующие программы, вроде Photo Gallery…

… или Snipping Tool…


Ну, и сам линк на длл-ку: слил, рапида, whatever you want )

UPD: версия 1.0.0.2 здесь и здесь. Исправлен баг с рандомным рейтингом в эксплорере.

От совершенства пока далековато (ручная регистрация утомительна), но уже вполне юзабельно.

И кстати, всех со днем влюбленных! Меньше ненависти и кармокастрации, больше любви и креатива!
Tags:
Hubs:
+29
Comments 87
Comments Comments 87

Articles