Blog. Just Blog

Контекстное меню с использованием Advanced Query Syntax

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Software | Автор: ManHunter
Контекстное меню с использованием Advanced Query Syntax
Контекстное меню с использованием Advanced Query Syntax

Система Windows предоставляет широчайшие возможности для поиска файлов, хранящихся на диске. Если посмотреть в официальной документации на Advanced Query Syntax, то там можно найти шаблоны для поиска файлов по фрагменту имени, дате создания, важности, локации, а также другим признакам, которые можно назначить файлу. Но мало кто знает, что эти же параметры фильтрации можно использовать не только для поиска, но и для контекстного меню.

Например, надо назначить команду, которая будет появляться в контекстном меню только при вызове на файле с определенным именем. Не проблема, рисуем reg-файл примерно такого содержания:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\chklog]
@="Check Log File"
"AppliesTo"="System.FileName:=server.log"

[HKEY_CLASSES_ROOT\*\shell\chklog\command]
@="\"C:\\Program Files\\LogChk Pro\\lc.exe\" \"%1\""

К названию команды добавился новый параметр AppliesTo, в котором указывается критерий отбора по правилам Advanced Query Syntax. Теперь при клике в Проводнике на файле с именем server.log в контекстном меню появится команда Check Log File. На любом другом файле этой команды не будет.

Команда в контекстном меню
Команда в контекстном меню

Как известно, контекстное меню отрабатывает по последнему файлу, на котором остановился выбор, даже если были выбраны несколько файлов разных типов. Чтобы контекстное меню появлялось только при выборе единственного файла, надо добавить дополнительный параметр "MultiSelectModel"="Single"

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\chklog]
@="Check Log File"
"AppliesTo"="System.FileName:=server.log"
"MultiSelectModel"="Single"

[HKEY_CLASSES_ROOT\*\shell\chklog\command]
@="\"C:\\Program Files\\LogChk Pro\\lc.exe\" \"%1\""

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

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\chklog]
@="Check Log File"
"AppliesTo"="System.FileName:=server.log System.Size:>0"
"MultiSelectModel"="Single"

[HKEY_CLASSES_ROOT\*\shell\chklog\command]
@="\"C:\\Program Files\\LogChk Pro\\lc.exe\" \"%1\""

Или, например, чтобы контекстное меню появлялось только для пустых файлов:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\deltrash]
@="Delete Empty File"
"AppliesTo"="System.Size:=0"
"MultiSelectModel"="Single"

[HKEY_CLASSES_ROOT\*\shell\deltrash\command]
@="cmd /c del \"%1\""

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

Поделиться ссылкой ВКонтакте
Просмотров: 1346 | Комментариев: 1

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
greeple (01.02.2024 в 17:13):
а можно как то сделать так, чтобы вложенные пункты в контекстных меню появлялись только по шифту, но в главном меню пункт оставался? сколько не пробовал не работает это, не в shell если прописывать доп. меню, не в subcommands

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.09 сек. / MySQL: 2 (0.0041 сек.) / Память: 4.5 Mb
Наверх