Контекстное меню с использованием 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
Добавить комментарий
Заполните форму для добавления комментария