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

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

    Итак, встречаем — 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 здесь и здесь. Исправлен баг с рандомным рейтингом в эксплорере.

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

    И кстати, всех со днем влюбленных! Меньше ненависти и кармокастрации, больше любви и креатива!
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 87

      0
      Хорошо написали.
      Только всё равно кривовато работает, да? ,)
        0
        Работает-то более-менее нормально :)
        Вот ставится кривовато, да...

        И пока есть один маленький known косяк, который особо не достает, но хорошо бы поправить... но это потом )
          0
          Какой косяк? :)
          А я люблю метки к avi делать - но не судьба =(
            0
            Ну привяжите к avi — делов-то? :)

            А косяк с тем, что explorer при включенном столбце рейтинга, если рейтинг у файла не выставлен, показывает его от балды. То ли где-то переменная не обнуляется, то ли експлорер фигней страдает...
            –4
            ЗЫ - положите dll'ку в другое место, я лично, принципиально не скачиваю ничего со slil.ru
            • UFO just landed and posted this here
                0
                Инсталлировать там почти нечего :)
                Ему бы конфигуратор, который бы думал, чего куда дописать...
                  0
                  Вам бы офис вручную в реестре регистрировать, там точно исталаятор не нужен.
                    0
                    Инсталятор, конфигуратор - но инструмент для того что бы вручную не лазать в реестр к нему точно нужен. И тогда это будет готовый продукт.

                    Пожалуйста?-)
                      +2
                      Я работаю над этим :)
              0
              о, спасибо огромное. статья супер. можно выложу на своем блоге, со всеми копирайтами есессно?
                0
                Да мне не жалко, выкладывайте )
                  0
                  ваша статья крута тем, что нигде в инете нет информации такой. все пишут в стиле "метки в висте еще нужно доработать!"
                    0
                    Конечно, нигде нет — только пару часов назад дописал код :)

                    Кстати, я тут осознал, что в офис так рано ехать смысла нету, так что тут и тут версия с исправленным багом с рейтингом.
                      0
                      на чем писали?
                        0
                        На плюсах :)
                          0
                          какие интерфейсики нужно было реализовать?
                            0
                            Все зависит от того, что именно нужно получить :)
                            В простейшем случае — IPropertyStore, IPropertyStoreCapabilities и что-нибудь из IInitializeWith(File|Item|Stream).
                              0
                              Понял, спасибо! Вопрос такой: как в файловой системе храняться потоки? вернее меня интересует - будет ли 1 поток занимать отдельный кластер, или общий (т.е. с основным)
                                +3
                                Зависит от размера. Если маленький — вообще в MFT поместиться может, если побольше — тогда отдельное место будет занимать, как любой другой файл.

                                Кстати, я тут подсмотрел про Flip3d у Вас в блоге... Вот Вам информация для размышления:
                                1) Альт-таб имеет невысокий приоритет, что, вообще говоря, ужасно.
                                2) Если эксплорер завис, то и альт-таб не работает (попробуйте, например, подключиться дебуггером к нему).
                                Win+Tab лишен этих недостатков.
                                  0
                                  про флип3д - это очень субьективный пост. мне просто он не нравится.
                                  по поводу зависания эксплорера - он у меня ни разу не повис, не могу прокоментировать.
                                    0
                                    спасибо за tip с Win-Tab'ом
                                      0
                                      Присоединяюсь - спасибо за подсказку насчем Win+Tab.
                                      Буду проверять когда что нибудь подвиснет в следующий раз. :)
                            0
                            а посмотреть нельзя случайно? У меня розовая мечта - тэговая файловая система...=) к сожалению юзаю линукс - но хоть посмотрю принципы работы..)) Или тут принципиальая завязка в вИну?
                              0
                              Принципиальная, угу. Причем именно в Висту.
                                0
                                Жалко. Вот бы для XP такое :)
                                Но Вы молодец :)
                      0
                      " «переместить» в дополнительном ключе реестра Fallback "
                      а где этот FallBack?
                        0
                        туплю, не обращайте внимания
                        –3
                        Еееелки-палки, а вы говорите в линуксе все сложно...
                          0
                          Это как ядро без menuconfig ;)
                          Если прикрутить конфигуратор, то все будет элементарно. Просто нужно время, чтобы его сделать ;)
                            –1
                            Всегда было интересно, какими соображениями руководствуются люди, минусующие подобные комментарии. Видать, действительно правда глаза колет :)
                              0
                              Ну я в основном только читаю, поэтому на карму в принципе наплевать :-)
                                0
                                + и - в комментариях на карму не влияют. Да и карма нужна не только для написания, но и вообще для использования всех функций Хабра (оценивание там, может еще что-то... у меня её тоже нету:)).
                                  0
                                  Хм, разве?
                                  Меня 3 раза проминусовали и у меня на личной странице как-раз:
                                  Карма -3,26 (3 голоса)
                                    –1
                                    Да, это точно. За карму они (высшие члены Хабрасообщества :)) голосуют отдельно. Я сам радовался, когда комментарий +10 заработал, однако на карме это не отразилось :(
                                  0
                                  Меня в принципе раздражает дурацкая возможность анонимно оценивать комментарий. Поставил плюс - поясни, почему. Поставил минус - скажи, что не понравилось. При текущей системе смысл оценок комментариев от меня ускользает. Мало того, что они мало на что влияют, так еще и выставляться могут от фонаря. Ерунда.
                              –4
                              и что только люди не делают, лишь бы не ставить MacOS/Linux
                                0
                                А есть ли подобные решения для вин хр? хотя бы метки
                                  0
                                  XP не поддерживает ни Property System, ни группировки/фильтры/сортировки.
                                  Отсюда следует, что не получится ни удобно редактировать, ни делать выборки.
                                  А вообще, конечно, можно прикрутить столбец с чем угодно и PropertyPage для редактирования. Только польза от этого весьма сомнительная...
                                    0
                                    Группировки есть :)
                                      0
                                      Очень примитивные. Так, например, один и тот же элемент не сможет попасть в две группы.
                                      0
                                      Так эта, есть же. На вкладе Сводка, поле Ключевые слова. Поиск по ним работает (неявно). Нужно только сделать службу, которая бы отслеживала добавление новых кейвордов и вела бы их список. И меню в Эксплорере, где этот список бы показывался (и по клику на кейворде выполнялся бы поиск в открытой папке). Меня бы такое вполне устроило...
                                        0
                                        Это работает не для всех типов файлов (тупо дизейблится, если файл отдает собственную сводку, например параметры аудио или видео). Да и вообще, как-то неюзабельно, если честно...
                                    0
                                    а вы считаете что хранить в отдельном потоке тэги - оптимальный вариант?
                                      0
                                      А черт его знает )
                                      По крайней мере, это
                                      а) просто с точки зрения реализации
                                      б) не требует установки чего-либо дополнительного, вроде сервера БД.
                                      в) явно быстрее парсинга текстового файла с параметрами, если в папке куча файлов.
                                      г) не требует лишних действий при копировании/переименовании/перемещении/удалении файла.
                                      Конечно, есть и минусы :)
                                        0
                                        г) если на другой раздел переместили (у меня это часто происходит), то вроде задница.

                                        вообще считаю, что ваша реализация отличная.
                                        п.с. сам думал как в сторону потоков, так и в сторону создания сервиса, который уже хранит всё хмле, при старте грузит в память , а дллка с ним контачит. у этого способа тоже миллион минусов =)
                                          0
                                          оппа. попробовал скопировать - перенеслось и на другой раздел!! как так?!
                                            +2
                                            Элементарно :)
                                            If you copy a file with alternate data streams to another NTFS partition, then the streams are retained.
                                      +2
                                      идеальный пост — что-то не устраивает, взял сделал и поделился :-))

                                      100% user content типа :)
                                      • UFO just landed and posted this here
                                          0
                                          Эээ... Что, простите, должно пририсовываться к иконке? :)
                                            –2
                                            посмотрите на его карму
                                            • UFO just landed and posted this here
                                            • UFO just landed and posted this here
                                                0
                                                Интересная мысль. На будущее можно задуматься.
                                                  0
                                                  Вот только ставить их через свойства файла помоему не очень удобно. А сортировка по ним есть, да?
                                                    0
                                                    Ставить очень удобно, сортировки нет.
                                                    у них смысл несколько иной, чем у тегов.

                                                    В *nix есть жесткие ссылки на файл, которые позволяют положить 1 файл в 2 каталога т.о можно создать каталоги video и text с соответствующим содержанием, а затем слинковать то, что относится к юмору в каталог humor. Это фактически и есть реализация тегов, только ужасно древняя : )
                                                      0
                                                      Ну, жесткие ссылки есть и в винде. Так же, как и символические. Только это счастье — так себе :)
                                                        0
                                                        Нет их там. Там есть "junction points" — некий аналог. Это а) немного не то, б) появилось относительно недавно и, в) не имеет поддержки в UI (!). Пользователю предлагается набирать команды вида "mountvol cd \\?\Volume{e2464850-8089-11d2-8803-806d6172696f}\.",

                                                        В *nix оно делается через через Alt и перетаскивание (симлинки). Ну и команду ln, конечно.
                                                          0
                                                          Вы, мягко говоря, не правы :)
                                                          Жесткие ссылки и джанкшены есть еще как минимум с 2000-й винды (8 лет — это относительно недавно?). И никаких извращенных команд не нужно:
                                                          fsutil hardlink create <new file> <old file>

                                                          Для джанкшенов есть удобная утилита junction от SysInternals, которая имеет похожий синтаксис. И это уже есть очень давно.

                                                          В Висте же
                                                          а) появились полноправные символические ссылки (могут ссылаться хоть на файл, хоть на сетевую шару)
                                                          б) появилась утилита mklink, которая позволяет легко создавать все три типа ссылок.
                                                            0
                                                            8 лет это именно оно. Сколько лет ln-у боюсь считать : )

                                                            Команду списал 1-в-1 с микрософтовского сайта. Т.е. это рекомендация производителя.

                                                            mklink? А как-же Alt и перетаскивание? А на устройство ссылаться можно? На звуковую карту, например?
                                                              0
                                                              По большому счету, и виндам около 8 лет :) Именно тем виндам, под которыми уже можно нормально работать — NT 4.0 и Windows 98 не котируются.

                                                              "Команда с сайта" создает маунт-поинт для диска, а не для каталога, так что аналог ее - это какой-нибудь "mount -t iso9660 -o ro /dev/cdrom /cdrom". Пользователям винды не так часто нужно монтировать диски из консоли (да и вообще), чтобы помнить их идентификаторы ;)
                                                                0
                                                                Если быть точным, то не создает, а подключает некий диск к точке cd. Аналог верен, только вот он значительно читаемее (нет e2464850-8089-11d2-8803-806d6172696f).

                                                                Пользователям современных *nix ее тоже набирать надо только в исключительных случаях (и "-t iso9660 -o ro" не обязательно).

                                                                Аналогом ln [-s] a b будет linkd a b, вот только дальше начинаются приколы — удалять это дело надо через delrp, а через проводник или del — нельзя. В висте симлинки работают вроде правильно.

                                                                Вобщем есть в них некоторая "сырость", но прогресс очевиден.
                                                                  0
                                                                  Если быть совсем точным, то заполняет Reparse Buffer для объекта файловой системы "cd" =)

                                                                  Что касается проводника, то он (до Висты) просто не просекает, что это ссылка, поэтому удаляет по старинке — сначала файлы, потом саму директорию :)
                                                                  Кстати, это косяк именно проводника — файловое API (RemoveDirectory) обрабатывает такую ситуацию правильно.
                                                    0
                                                    Это фича Гнома. Но по семантике она далековата от сабжа, хотя ее можно использовать как еще одну прикрутку к меткам висты.
                                                0
                                                здорово, спасибо :)
                                                  0
                                                  Пожалуйста, продолжайте!
                                                    0
                                                    написал для себя утилитку на .net которая делает всё черную работу с реестром. нужно выкладывать или нет? (спрашиваю, потому что радующихся посту как то мало. видать виста не очень популярна =) )
                                                      0
                                                      Давай конечно!
                                                      0
                                                      отличная штука!
                                                      я давно мечтаю о специальном поле в файлах, в которых бы помещалась ссылка, откуда этот файл скачивался.
                                                      вот было бы здорово иметь плагин к опере, который при сохранении картинки будет автоматически заполнять поле "комментарий" ссылкой-сорсом этой картинки (или страницы, где картинка размещена).
                                                      • UFO just landed and posted this here
                                                          0
                                                          да, я в курсе, что кое-где. но хотелось бы везде и единообразно. :)
                                                          я также в курсе, что в маке моя мечта - давно реальность. включая пожелание примочки к браузеру.
                                                            0
                                                            "Wow Started 5 Years Ago" (c)Apple ;)
                                                        0
                                                        Если уж заговорили о тегах - существует ли решение для XP, или хотя бы desktop search engine, который бы позволял навешивать теги на найденные файлы, емейлы и директории (и, естественно, осуществлять поиск по ним)?
                                                          0
                                                          Чисто теоретически этот фильтр можно прикрутить и к Desktop Search Engine. Нужно только средство задавать значения свойств — это может быть, например, вкладка в свойствах.
                                                          Вот как по ним осуществлять потом поиск — тут уж сложнее. Можно, например, через Namespace Extension это сделать. Только это жу-уткий геморрой... )

                                                          А что касается директорий — это и под Вистой почти нереально :)
                                                            0
                                                            Спасибо, так я и думал, что готового решения нет ни у одного DSE (на коропоративном компе не хочется эксперементировать, а там это нужнее всего).
                                                          0
                                                          Большое спасибо! Отличная вещь :)
                                                            0
                                                            о, установка софта в Висте в стиле Линукса (=
                                                            ну что же, ждем появления dpkg-reconfigure хотя бы из консоли
                                                              0
                                                              Лучше уж репозитарий :)
                                                              0
                                                              Отличное решение для тегов и рейтингов! Огромное спасибо.

                                                              Хотел заметить, что помимо ограниченности форматов, где можно редактировать теги, в Висте бельмом на глазу смотрятся также иконки с привьюшками содержимого файлов. Ограниченность числа форматов файлов, иконки которых заменяются на превьюшки, очень сильно бросается в глаза. До мака тут еще очень далеко :(
                                                                0
                                                                Спасибо. Будем поюзать.
                                                                  0
                                                                  а что он у меня пишит:

                                                                  Модуль "c:\tagg.dll" загружен, но не удалось выполнить вызов DllRegisterServer, код ошибки: 0x80070005.
                                                                  Для получения дополнительных сведений об этой ошибке выполните поиск в Интернете, указав код ошибки как аргумент поиска.
                                                                    0
                                                                    0x80070005 : Access is denied.

                                                                    Из-под админа зарегистрируйте :)
                                                                    0
                                                                    Очень надо тоже самое, но портабельное и рабочее в том числе на 2000 винде.
                                                                    Не обязательно в проводнике, т.е. отдельное приложение, со своей базой подошло бы.
                                                                    Но что хотелось бы, это не просто присваивание этих ярлыков, но и полное использование этой технологии включая облака тегов и тп.
                                                                    Не уж то нет готовых решений?
                                                                      0
                                                                      Друзья, есть ли какие-то новости по теме? Уж год почти прошел, быть может, есть тулзы, позволяющие добавить метки к файлам более простым способом?
                                                                        0
                                                                        А что тут сложного, собственно? :)
                                                                        Зарегать одну длл-ку (для win64 — две) несложно, для настройки есть консольная утилита…
                                                                        0
                                                                        виста онли?

                                                                        Only users with full accounts can post comments. Log in, please.