Жахнувшись великою кількістю ненависті з попередньої статті, я вирішив трохи скрасити конфуз з мітками для користувачів Вісти. Ну насправді, якось зовсім недобре вийшло - тим більше, що сам давно хотів це зробити, та руки все не доходили...
Отже, зустрічаємо - 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 тут і тут. Виправлено порожній з рандомним рейтингом в експлорері.
Від досконалості поки далеченько (ручна реєстрація стомлива), але вже цілком юзабільно.
І до речі, всіх з днем закоханих! Менше ненависті і кармокастрації, більше любові і креативу!
