Контекстное меню Windows Explorer

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

Как выяснилось, в контекстное меню можно довольно просто добавлять простенькие строки без необходимости написания вручную библиотек Shell Extension.

Вся необходимая информация расположена по следующим ссылкам:
> http://msdn.microsoft.com/en-us/library/cc144171(v=vs.85).aspx
> http://msdn.microsoft.com/en-us/library/windows/desktop/bb266512(v=vs.85).aspx
> http://msdn.microsoft.com/en-us/library/windows/desktop/bb760776(v=vs.85).aspx

Касаемо вышеприведенного примера, реализовывается он так:

В реестре создаем следующие ключи:

HKEY_CLASSES_ROOT
└─> *
     └─> shell
           └─> custom_name
                   |   (Default)    REG_SZ    &friendly_name
                   |   AppliesTo    REG_SZ    file_filter
                   └─> command
                            └ (Default)  REG_SZ  path_to_program.exe %1

Здесь:
custom_name – произвольное неиспользуемое имя (например: ShowEriLnk);
friendly_name – заголовок для контекстного меню (например: Show Erinome Link);
file_filter – фильтр, по которому мы ограничим отображение данного меню только теми каталогами, которые нас интересуют. Например, если мы хотим отображать контекстное меню в расшаренном по SMB каталоге /www, расположенном на сервере 172.16.10.10 и откликающемся на имя server.lan, то фильтр может выглядеть так:
( System.ItemPathDisplay:$<“\\172.16.10.10\www” OR System.ItemPathDisplay:$<“\\server.lan\www” )
Подробнее о синтаксисе и возможных переменных – по приведенным выше ссылкам.
path_to_program.exe – самописная внешняя программа, которая преобразует переданный ей путь и отобразит на экране внешнюю ссылку, она может быть сделана на любом языке программирования.

Вполне вероятно, что это не самый оптимальный путь, но здесь нет необходимости программирования достаточно сложных Shell Extension’ов на C или других подобных языках с использованием WinAPI, требуется лишь правка системного реестра.

This entry was posted in Разное and tagged . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>