3

Я хотел бы добавить запись в контекстное меню для папок, но она должна отображаться только в контекстном меню, если рассматриваемая папка содержит файлы определенного типа (в данном случае, только если папка содержит файлы .avi). Это возможно?

Я уверен, что видел, по крайней мере, одну программу, в которой в определенных папках отображался только пункт контекстного меню, хотя я не могу вспомнить, что это было.

3 ответа3

9

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

Во-первых, на самом деле существует множество методов API, доступных из объекта System, упомянутого выше. Например, вместо ItemName вы также можете выбрать System.FileName (который работал лучше для меня) или System.ItemFolderPathDisplay ...

Во-вторых, синтаксис поиска несколько сложен, но на самом деле дает много возможностей. Вы можете использовать стандартные подстановочные знаки DOS в тесте AppliesTo (например, "?"для ровно 1 символа," * "для 0 или более символов). Вы можете использовать различные операторы для имени ... например, равно, не равно, содержит, начинается с, заканчивается и т.д. Вы можете объединить несколько условий с ключевыми словами "И" или "ИЛИ" (или использовать "НЕ" «).. Кажется, что вы даже можете использовать некоторый синтаксис поиска в стиле SQL, но я не смог заставить их работать через реестр (я мог просто ошибиться в синтаксисе ... не уверен).

3) Хотя я не нашел решения поставленного вопроса, в следующих сценариях реестра показано, как можно отображать или скрывать элементы контекстного меню в зависимости от имени и расположения папки. У меня просто есть всплывающее окно командной строки, но вы можете легко перейти на что-нибудь еще.

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Folder\shell\# Ends With '_mydata']
"AppliesTo"="System.FileName:\"*_mydata\""

[HKEY_CLASSES_ROOT\Folder\shell\# Ends With '_mydata'\command]
@="C:\\Windows\\System32\\cmd.exe /k cd /d \"%1\""

[HKEY_CLASSES_ROOT\Folder\shell\# Starts with 'C:-slash-[Videos]']
"AppliesTo"="System.ItemFolderPathDisplay:~< \"C:\\[VIDEOS]\""

[HKEY_CLASSES_ROOT\Folder\shell\# Starts with 'C:-slash-[Videos]'\command]
@="C:\\Windows\\System32\\cmd.exe /k cd /d \"%1\""

[HKEY_CLASSES_ROOT\Folder\shell\# Starts with 'C:-slash-[Videos]' AND ends with '_mydata']
"AppliesTo"="System.FileName:\"*_mydata\" AND System.ItemFolderPathDisplay:~<\"C:\\\""

[HKEY_CLASSES_ROOT\Folder\shell\# Starts with 'C:-slash-[Videos]' AND ends with '_mydata'\command]
@="C:\\Windows\\System32\\cmd.exe /k cd /d \"%1\""
4

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

Единственным общим механизмом в Windows для этого является расширенный синтаксис запросов поиска Windows. Одна из новых функций в Windows 7 - добавление значения "AppliesTo" для статических пунктов контекстного меню. Это позволяет отображать или скрывать статический элемент в зависимости от результата запроса AQS.

В этом примере значение DefaultAppliesTo делает этот глагол значением по умолчанию для любого файла со словом "exampleText1" в имени файла. Значение AppliesTo включает глагол для любого файла с "exampleText1" в имени. Значение HasLUAShield отображает экран для файлов с именем "exampleText2".

HKEY_CLASSES_ROOT
   txtile
      shell
         test.verb
            DefaultAppliesTo = System.ItemName:"exampleText1"
            HasLUAShield = System.ItemName:"exampleText2"
            AppliesTo = System.ItemName:"exampleText1"

Поскольку AQ недостаточно документированы, я не смог найти синтаксис для запроса содержимого папки.

0

Инструменты Filemenu позволят вам сделать это, по крайней мере, в своем собственном контекстном меню.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .