Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обработчики контекстного меню, также называемые обработчиками контекстного меню или verb обработчиками, являются типом обработчика типов файлов. Эти обработчики могут быть реализованы таким образом, чтобы они загружались в собственном процессе или в обозревателе или в других сторонних процессах. Обратите внимание на создание обработчиков в процессе выполнения, так как они могут причинить вред процессу, который загружает их.
Примечание.
При регистрации обработчиков, работающих в контексте 32-разрядных приложений на 64-разрядных версиях Windows, нужно учитывать, что система WOW64 перенаправляет доступ файловой системы к некоторым путям при вызове в контексте приложения иной разрядности. Если обработчик .exe хранится в одном из этих путей, он недоступен в этом контексте. Таким образом, в качестве обходного пути либо храните ваш .exe файл в папке, которая не перенаправляется, либо храните заглушку вашего .exe файла, которая запускает реальную версию.
Этот раздел организован следующим образом:
- Канонические глаголы
- Расширенные глаголы
- Глаголы для программного доступа
-
Настройка контекстного меню с помощью статических команд
- Активация обработчика с помощью интерфейса IDropTarget
- Указание позиции и порядка статических глаголов
- Размещение команд в верхней или нижней части меню
- Создание статических каскадных меню
- Получение динамического поведения для статических команд с помощью расширенного синтаксиса запросов
- Устаревшие: ассоциация глаголов с командами обмена данными
- Verb Выполнение задач реализации
- Связанные статьи
Канонические глаголы
Приложения обычно отвечают за предоставление локализованных строк отображения для определяемых ими команд. Однако для обеспечения степени независимости языка система определяет стандартный набор часто используемых глаголов, называемых каноническими глаголами. Канонический verb объект никогда не отображается пользователю и может использоваться с любым языком пользовательского интерфейса. Система использует каноническое имя для автоматического создания правильно локализованной отображаемой строки. Например, в строке отображения открытого файла verbзадано значение Open в английской системе и для немецкого эквивалента в немецкой системе.
| Канонический verb | Описание |
|---|---|
| Open | Открывает файл или папку. |
| Opennew | Открывает файл или папку в новом окне. |
| Выводит файл. | |
| Printto | Позволяет пользователю распечатать файл, перетащив его в объект принтера. |
| Explore | Открывает проводник Windows с выбранной папкой. |
| Properties | Открывает лист свойств объекта. |
Примечание.
Printtoverb также является каноническим, но он никогда не отображается. Его включение позволяет пользователю распечатать файл, перетащив его в объект принтера.
Обработчики контекстного меню могут предоставлять собственные канонические команды через IContextMenu::GetCommandString с GCS_VERBW или GCS_VERBA. Система будет использовать канонические команды в качестве второго параметра (lpOperation), переданного ShellExecute, и является CMINVOKECOMMANDINFO.Член lpVerb, переданный методу IContextMenu::InvokeCommand.
Расширенные глаголы
Когда пользователь щелкает объект правой кнопкой мыши, контекстное меню отображает команды по умолчанию. Может потребоваться добавить и поддерживать команды в некоторых контекстных меню, которые не отображаются в каждом контекстном меню. Например, можно использовать команды, которые обычно не используются или предназначены для опытных пользователей. По этой причине можно также определить один или несколько расширенных глаголов. Эти глаголы похожи на обычные глаголы, но отличаются от них по способу их учета. Чтобы получить доступ к расширенным глаголам, пользователь должен щелкнуть правой кнопкой мыши на объекте, удерживая клавишу SHIFT. Когда пользователь делает это, расширенные команды отображаются в дополнение к командам по умолчанию.
Реестр можно использовать для определения одного или нескольких расширенных глаголов. Связанные команды будут отображаться только в том случае, если пользователь щелкает объект правой кнопкой мыши, а также нажимает клавишу SHIFT. Чтобы определить verb как расширенный, добавьте значение "расширенный" REG_SZ в подраздел verb. Значение не должно быть связано с данными.
Глаголы только для программного доступа
Эти глаголы никогда не отображаются в контекстном меню. К этим данным можно получить доступ с помощью ShellExecuteEx и указания поля lpVerb параметра pExecInfo (объекта SHELLEXECUTEINFO). Чтобы задать verb как доступ только для программы, добавьте значение REG_SZ "ProgrammaticAccessOnly" в verb подраздел. Значение не должно быть связано с данными.
Реестр можно использовать для определения одного или нескольких расширенных глаголов. Связанные команды будут отображаться только в том случае, если пользователь щелкает объект правой кнопкой мыши, а также нажимает клавишу SHIFT. Чтобы определить verb как расширенный, добавьте значение REG_SZ в подраздел verb. Значение не должно быть связано с данными.
Настройка контекстного меню с помощью статических команд
После выбора статического или динамического Verb для вашего меню быстрого доступа можно расширить меню быстрого доступа для типа файла, зарегистрировав статическое verb для типа файла. Для этого добавьте Shell подключ под подраздел ключа ProgID для приложения, связанного с типом файла. При необходимости можно определить значение по умолчанию для типа файла, сделав его значением по умолчанию verb подраздела Shell .
Элемент verb по умолчанию отображается первым в контекстном меню. Его назначение заключается в предоставлении Shellverb который можно использовать при вызове функции ShellExecuteEx, если verb не указано. Параметр Shell не обязательно выбирает значение по умолчанию verb , если ShellExecuteEx используется в этом режиме.
Shell использует первое доступное verb в следующем порядке:
- Значение по умолчанию verb
- Первый verb в реестре, если порядок verb указан
- Эти Openverb
- Тот Open Withverb
Если ни одна из перечисленных команд не доступна, операция завершается ошибкой.
Создайте один подраздел для каждого verb, который вы хотите добавить под подразделом Shell. Каждый из этих подразделов должен иметь значение REG_SZ, которое соответствует отображаемой строке (локализованной строке) verb. Для каждого verb подраздела создайте подраздел команды со значением по умолчанию, заданным в командной строке для активации элементов. Для канонических глаголов, таких как Open и Print, можно опустить отображаемую строку, потому что система автоматически отображает правильно локализованную строку. Для неканонических глаголов, если не указана отображаемая строка, verb отображается строка.
В следующем примере реестра обратите внимание, что:
- Так как Doit не является каноническим verb, он назначает отображаемое имя, которое можно выбрать, нажав клавишу D.
- Printtoverb не отображается в контекстном меню. Однако его включение в реестр позволяет пользователю печатать файлы, сбрасывая их на значок принтера.
- Для каждого из них verbотображается один подраздел. %1 представляет имя файла и %2 имя принтера.
HKEY_CLASSES_ROOT
.myp-ms
(Default) = MyProgram.1
MyProgram.1
(Default) = My Program Application
Shell
(Default) = doit
doit
(Default) = &Do It
command
(Default) = c:\MyDir\MyProgram.exe /d "%1"
open
command
(Default) = c:\MyDir\MyProgram.exe /d "%1"
print
command
(Default) = c:\MyDir\MyProgram.exe /p "%1"
printto
command
(Default) = c:\MyDir\MyProgram.exe /p "%1" "%2"
На следующей схеме показано расширение контекстного меню в соответствии с приведенными выше записями реестра. В этом контекстном меню есть Open, Do It и Print, причем Do It является командой по умолчанию verb.
Активация вашего обработчика событий с помощью интерфейса IDropTarget
Динамический обмен данными (DDE) не рекомендуется; вместо этого используйте IDropTarget . IDropTarget является более надежным и имеет лучшую поддержку активации, так как она использует COM-активацию обработчика. В случае выбора нескольких элементов IDropTarget не распространяется на ограничения размера буфера, найденные как в DDE, так и в CreateProcess. Кроме того, элементы передаются приложению в качестве объекта данных, который можно преобразовать в массив элементов с помощью функции SHCreateShellItemArrayFromDataObject. Это проще и не теряет сведения о пространстве имен, как происходит при преобразовании элемента в путь для протоколов командной строки или DDE.
Дополнительные сведения об IDropTarget и запросах атрибутов сопоставления файлов см. в разделе "Предполагаемые типы"Shell и "Регистрация приложений".
Указание позиции и порядка статических глаголов
Обычно глаголы упорядочены в контекстном меню на основе перечисления; перечисление основано сначала на порядке массива ассоциаций, а затем по порядку элементов в массиве ассоциаций, как определено порядком сортировки, определённым реестром.
Глаголы можно упорядочить путем указания значения по умолчанию подраздела Shell для записи ассоциации. Это значение по умолчанию может включать один элемент, который будет отображаться в верхней позиции контекстного меню, или список элементов, разделенных пробелами или запятыми. В последнем случае первый элемент в списке является элементом по умолчанию, а другие глаголы отображаются непосредственно под ним в указанном порядке.
Например, следующая запись реестра создает команды контекстного меню в следующем порядке:
- Отображать
- Гаджеты
- Персонализация
HKEY_CLASSES_ROOT
DesktopBackground
Shell
Display
Gadgets
Personalization
Аналогичным образом следующая запись реестра создает команды контекстного меню в следующем порядке:
- Персонализация
- Гаджеты
- Отображать
HKEY_CLASSES_ROOT
DesktopBackground
Shell = "Personalization,Gadgets"
Display
Размещение команд в верхней или нижней части меню
Следующий атрибут реестра можно использовать для размещения verb в верхней или нижней части меню. Если несколько глаголов указывают этот атрибут, то приоритет получает последний из них.
Position=Top | Bottom
Создание статических каскадных меню
В Windows 7 и более поздних версиях реализация каскадного меню поддерживается с помощью параметров реестра. До Windows 7 создание каскадных меню было возможно только через реализацию интерфейса IContextMenu . В Windows 7 и более поздних версиях следует использовать решения на основе COM только в том случае, если статические методы недостаточно.
На следующем снимке экрана представлен пример каскадного меню.
В Windows 7 и более поздних версиях существует три способа создания каскадных меню:
- Создание каскадных меню с помощью записи реестра SubCommands
- Создание каскадных меню с помощью записи реестра ExtendedSubCommandsKey
- Создание каскадных меню с помощью интерфейса IExplorerCommand
Создание каскадных меню с помощью записи реестра SubCommands
В Windows 7 и более поздних версиях можно использовать запись SubCommands для создания каскадных меню с помощью следующей процедуры.
Создание каскадного меню с помощью записи SubCommands
Создайте подраздел в разделе HKEY_CLASSES_ROOT\ProgID\shell , чтобы представить каскадное меню. В этом примере мы предоставим этому подразделу имя CascadeTest. Убедитесь, что значение по умолчанию подраздела CascadeTest является пустым и отображается как (значение не задано).
HKEY_CLASSES_ROOT * shell CascadeTest (Default)В вложенный ключ CascadeTest добавьте запись MUIVerb типа REG_SZ и назначьте текст, который будет отображаться в контекстном меню. В этом примере мы назначаем ему "Тестовое каскадное меню".
HKEY_CLASSES_ROOT * shell CascadeTest (Default) MUIVerb = Test Cascade MenuВ вложенный ключ CascadeTest добавьте запись SubCommands типа REG_SZ, которая назначена списку, разделяемая точками с запятой, из команд, которые должны отображаться в меню в порядке внешнего вида. Например, здесь мы назначаем несколько системных глаголов.
HKEY_CLASSES_ROOT * Shell CascadeTest SubCommands Windows.delete;Windows.properties;Windows.rename;Windows.cut;Windows.copy;Windows.pasteВ случае пользовательских глаголов реализуйте их с помощью любого из статических verb методов реализации и поместите их в подраздел CommandStore, как показано в примере для вымышленного verbVerbName:
HKEY_LOCAL_MACHINE Software Microsoft Windows CurrentVersion Explorer CommandStore Shell VerbName command (Default) = notepad.exe %1
Примечание.
Этот метод имеет то преимущество, что пользовательские глаголы можно зарегистрировать один раз и повторно использовать, перечислив verb имя в разделе SubCommands. Однако приложению требуется разрешение на изменение реестра в HKEY_LOCAL_MACHINE.
Создание каскадных меню с помощью записи реестра ExtendedSubCommandsKey
В Windows 7 и более поздних версиях можно использовать запись ExtendedSubCommandKey для создания расширенных каскадных меню: каскадных меню внутри каскадных меню.
На следующем снимке экрана показан пример расширенного каскадного меню.
Так как HKEY_CLASSES_ROOT является сочетанием HKEY_CURRENT_USER и HKEY_LOCAL_MACHINE, вы можете зарегистрировать любые пользовательские глаголы в подразделе HKEY_CURRENT_USER\Software\Classes. Основное преимущество заключается в том, что повышенные разрешения не требуются. Кроме того, другие ассоциации файлов могут повторно использовать этот набор команд, указав тот же подраздел ExtendedSubCommandsKey. Если вам не нужно повторно использовать этот набор команд, можно перечислить команды в родительском элементе, но убедитесь, что значение по умолчанию родительского элемента пусто.
Создание каскадного меню с помощью записи ExtendedSubCommandsKey
Создайте подраздел в разделе HKEY_CLASSES_ROOT\ProgID\shell , чтобы представить каскадное меню. В этом примере мы предоставим этому подразделу имя CascadeTest2. Убедитесь, что значение по умолчанию подраздела CascadeTest является пустым и отображается как (значение не задано).
HKEY_CLASSES_ROOT * shell CascadeTest2 (Default)В вложенный ключ CascadeTest добавьте запись MUIVerb типа REG_SZ и назначьте текст, который будет отображаться в контекстном меню. В этом примере мы назначаем ему "Тестовое каскадное меню".
HKEY_CLASSES_ROOT * shell CascadeTest (Default) MUIVerb = Test Cascade Menu 2В созданном подразделе CascadeTest добавьте подраздел ExtendedSubCommandsKey , а затем добавьте подкоманда документа (типа REG_SZ ); например:
HKEY_CLASSES_ROOT txtfile Shell Test Cascade Menu 2 (Default) ExtendedSubCommandsKey Layout Properties Select allУбедитесь, что значение по умолчанию подраздела Тест каскадного меню 2 является пустым и отображается как (значение не задано).
Заполните вложенные объекты с помощью любой из следующих статических verb реализаций. Обратите внимание, что подраздел CommandFlags представляет значения EXPCMDFLAGS. Если вы хотите добавить разделитель до или после каскадного элемента меню, используйте ECF_SEPARATORBEFORE (0x20) или ECF_SEPARATORAFTER (0x40). Описание этих флагов Windows 7 и более поздних версий см. в разделе IExplorerCommand::GetFlags. ECF_SEPARATORBEFORE работает только для элементов меню верхнего уровня. MUIVerb имеет тип REG_SZ, а CommandFlags имеет тип REG_DWORD.
HKEY_CLASSES_ROOT txtile Shell Test Cascade Menu 2 (Default) ExtendedSubCommandsKey Shell cmd1 MUIVerb = Notepad command (Default) = %SystemRoot%\system32\notepad.exe %1 cmd2 MUIVerb = Wordpad CommandFlags = 0x20 command (Default) = "C:\Program Files\Windows NT\Accessories\wordpad.exe" %1
На следующем снимке экрана приведена иллюстрация предыдущих примеров записи реестра.
Создание каскадных меню с помощью интерфейса IExplorerCommand
Другим вариантом добавления глаголов в каскадное меню является IExplorerCommand::EnumSubCommands. Этот метод позволяет источникам данных, предоставляющим команды модуля команд с помощью IExplorerCommandProvider, использовать эти команды как глаголы в контекстном меню. В Windows 7 и более поздних версиях можно предоставить ту же verb реализацию с помощью IExplorerCommand , что и в IContextMenu.
На следующих двух снимках экрана показано использование каскадных меню в папке "Устройства ".
На следующем снимке экрана показана другая реализация каскадного меню в папке "Устройства ".
Примечание.
Так как IExplorerCommand поддерживает только активацию в процессе, рекомендуется использовать источниками данных, которые должны совместно использовать Shell реализацию между командами и контекстными менюми.
Получение динамического поведения для статических команд с помощью расширенного синтаксиса запросов
Расширенный синтаксис запросов (AQS) может выразить условие, которое будет оцениваться с помощью свойств объекта, для которого verb создается объект. Эта система работает только с быстрыми свойствами. Это свойства, которые источник данных Shell отмечает как быстрые, не возвращая SHCOLSTATE_SLOW из IShellFolder2::GetDefaultColumnState.
Windows 7 и более поздних версий поддерживают канонические значения, которые позволяют избежать проблем с локализованными сборками. Следующий канонический синтаксис необходим для локализованных сборок, чтобы воспользоваться этим усовершенствованием Windows 7.
System.StructuredQueryType.Boolean#True
В следующем примере записи реестра:
- Значение AppliesTo определяет, будет ли verb отображаться или скрываться.
- Значение DefaultAppliesTo определяет, какой элемент verb является значением по умолчанию.
- Значение HasLUAShield управляет тем, отображается ли значок щита контроля учетных записей пользователей (UAC).
В этом примере значение DefaultAppliesTo делает это verb значение по умолчанию для любого файла со словом exampleText1 в имени файла. Значение AppliesTo активирует verb для любого файла с названием "exampleText1". Значение HasLUAShield отображает щит для файлов, содержащих "exampleText2" в названии.
HKEY_CLASSES_ROOT
txtile
shell
test.verb
DefaultAppliesTo = System.ItemName:"exampleText1"
HasLUAShield = System.ItemName:"exampleText2"
AppliesTo = System.ItemName:"exampleText1"
Добавьте подключ Command и значение:
HKEY_CLASSES_ROOT
txtile
shell
test.verb
Command
(Default) = %SystemRoot%\system32\notepad.exe %1
В реестре Windows 7 посмотрите HKEY_CLASSES_ROOT\диск как пример команд BitLocker, которые используют следующий подход:
- AppliesTo = System.Volume.BitlockerProtection:=2
- System.Volume.BitlockerRequiresAdmin:=System.StructuredQueryType.Boolean#True
Дополнительные сведения об AQS см. в разделе "Расширенный синтаксис запросов".
Устарело: Связывание глаголов с командами DDE (Dynamic Data Exchange)
DDE не рекомендуется; вместо этого используйте IDropTarget . DDE устаревший, потому что оно зависит от сообщения оконного вещания для обнаружения сервера DDE. Сервер DDE зависает из-за задержки сообщения окна трансляции, что приводит к зависанию сеансов DDE для других приложений. Обычно одно зависшее приложение может вызывать последующие зависания во всем пользовательском опыте.
Метод IDropTarget является более надежным и имеет лучшую поддержку активации, так как он использует COM-активацию обработчика. В случае выбора нескольких элементов IDropTarget не распространяется на ограничения размера буфера, найденные как в DDE, так и в CreateProcess. Кроме того, элементы передаются приложению в качестве объекта данных, который можно преобразовать в массив элементов с помощью функции SHCreateShellItemArrayFromDataObject. Это проще и не теряет сведения о пространстве имен, как происходит при преобразовании элемента в путь для протоколов командной строки или DDE.
Дополнительные сведения об IDropTarget и запросах атрибутов сопоставления файлов см. в разделе "Предполагаемые типы"Shell и "Регистрация приложений".
Verb Выполнение задач реализации
Следующие задачи для реализации глаголов относятся как к статическим, так и к динамическим verb реализациям. Дополнительные сведения о динамических командах см. в разделе "Настройка контекстного меню с помощью динамических команд".
Настройка контекстного меню для предопределенных Shell объектов
Многие предопределенные Shell объекты имеют контекстные меню, которые можно настроить. Зарегистрируйте команду точно так же, как вы регистрируете типичные типы файлов, но используйте имя предопределенного объекта в качестве имени типа файла.
Список предопределенных объектов находится в разделе "Предопределенные Shell объекты " в разделе "Создание Shell обработчиков расширений". Эти предопределенные Shell объекты, контекстные меню которых можно настроить, добавив команды в реестр, помечены в таблице словом Verb.
Расширение нового подменю
Когда пользователь открывает меню "Файл " в проводнике Windows, отображается одна из команд: "Создать". При выборе этой команды отображается подменю. По умолчанию подменю содержит две команды, Папка и Ярлык, которые позволяют пользователям создавать вложенные папки и ярлыки. Этот подменю можно расширить, чтобы включить команды создания файлов для любого типа файла.
Чтобы добавить команду создания файла в подменю New , файлы приложения должны иметь связанный тип файла. Добавьте вложенный ключ ShellNew в имя файла. При выборе Shell команды "Создатьфайл" в подменю "Создать" добавляется тип файла. Отображаемая строка команды — это описательная строка, назначенная progID программы.
Чтобы указать метод создания файла, задайте одно или несколько значений данных подразделу ShellNew. Доступные значения перечислены в следующей таблице.
| Значение подраздела ShellNew | Описание |
|---|---|
| команда | Выполняет приложение. Это REG_SZ значение указывает путь выполнения приложения. Например, можно настроить его для запуска мастера. |
| Данные | Создает файл, содержащий указанные данные. Это REG_BINARY значение указывает данные файла. Данные игнорируются, если задано значение NULLFile или FileName . |
| Имя файла | Создает файл, который является копией указанного файла. Это REG_SZ значение указывает полный путь копируемых файлов. |
| Пустой файл | Создает пустой файл. NullFile не присвоено значение. Если задан NullFile, значения реестра Data и FileName игнорируются. |
В следующем примере раздела реестра и снимке экрана продемонстрировано новое подменю для типа файла .myp-ms. У него есть команда MyProgram Application.
HKEY_CLASSES_ROOT
.myp
(Default) = MyProgram.1
MyProgram.1
ShellNew
NullFile
Снимок экрана иллюстрирует новый подменю. Когда пользователь выбирает приложение MyProgram из New подменю, Shell создается файл с именем New MyProgram Application.myp-ms и передает его MyProgram.exe.
Создание обработчиков перетаскивания
Базовая процедура реализации обработчика перетаскивания аналогична обычным обработчикам контекстного меню. Однако обработчики контекстного меню обычно используют только указатель IDataObject, передаваемый методу IShellExtInit::Initialize для извлечения имени объекта. Обработчик перетаскивания может реализовать более сложный обработчик данных для изменения поведения перетаскиваемого объекта.
Когда пользователь щелкает Shell объект правой кнопкой мыши для перетаскивания объекта, контекстное меню отображается при попытке удалить объект. На следующем снимке экрана показано типичное контекстное меню перетаскивания.
Обработчик перетаскивания — это обработчик контекстного меню, который может добавлять элементы в это контекстное меню. Обработчики перетаскивания обычно регистрируются в следующем подразделе.
HKEY_CLASSES_ROOT
Directory
shellex
DragDropHandlers
Добавьте подключ под DragDropHandlers с именем обработчика перетаскивания и задайте значение по умолчанию этого подключа в строковое представление идентификатора класса обработчика (CLSID). В следующем примере включается обработчик перетаскивания MyDD .
HKEY_CLASSES_ROOT
Directory
shellex
DragDropHandlers
MyDD
(Default) = {MyDD CLSID GUID}
Подавление глаголов и управление видимостью
Параметры политики Windows можно использовать для управления verb видимостью. Глаголы можно подавлять с помощью настроек политики, добавив значение SuppressionPolicy или значение GUID SuppressionPolicyEx в подраздел реестра verb. Задайте для подраздела SuppressionPolicy значение идентификатора политики. Если политика включена, verb и связанные с ней пункты контекстного меню отключаются. Возможные значения идентификаторов политики см. в перечислении RESTRICTIONS .
Verb Использование модели выбора
Значения реестра должны быть заданы для обработки ситуаций, когда пользователь может выбрать один элемент, несколько элементов или произвести выбор внутри элемента. verb требует отдельных значений реестра для каждой из этих трех ситуаций, которые поддерживает verb. Возможные значения для verb модели выбора приведены следующим образом:
- Укажите значение MultiSelectModel для всех глаголов. Если значение MultiSelectModel не указано, оно выводится из выбранного verb типа реализации. Предполагается, что для методов на основе COM (например, DropTarget и ExecuteCommand) используется проигрыватель , а для других методов — Document .
- Укажите одиночный для глаголов, поддерживающих только один вариант выбора.
- Укажите Player для глаголов, поддерживающих любое количество элементов.
- Укажите документ для команд, создающих окно верхнего уровня для каждого элемента. Это ограничивает количество активированных элементов и помогает избежать превышения системных ресурсов, если пользователь открывает слишком много окон.
Если количество выбранных элементов не соответствует verb модели выбора или больше ограничений по умолчанию, описанных в следующей таблице, verb не отображается.
| verb Тип реализации | Документ | Игрок |
|---|---|---|
| Наследие | 15 элементов | 100 элементов |
| COM | 15 элементов | Без ограничений |
Ниже приведены примеры записей реестра с помощью значения MultiSelectModel.
HKEY_CLASSES_ROOT
Folder
shell
open
= MultiSelectModel = Document
HKEY_CLASSES_ROOT
ProgID
shell
verb
= MultiSelectModel = Single | Document | Player
Использование атрибутов элементов
Значения флага SFGAO атрибутов Shell элемента можно проверять, чтобы определить, включить ли или отключить verb.
Чтобы использовать эту функцию атрибута, добавьте следующие значения REG_DWORD под verb:
- Значение AttributeMask указывает значение SFGAO битовых значений маски для тестирования.
- Значение AttributeValue указывает значение SFGAO тестируемых битов.
- В параметре ImpliedSelectionModel указано нулевое значение для глаголов элементов, либо ненулевое значение для глаголов в фоновом контекстном меню.
В следующем примере записи реестра атрибутMask имеет значение SFGAO_READONLY (0x40000).
HKEY_CLASSES_ROOT
txtfile
Shell
test.verb2
AttributeMask = 0x40000
AttributeValue = 0x0
ImpliedSelectionModel = 0x0
command
(Default) = %SystemRoot%\system32\notepad.exe %1
Реализация пользовательских команд для папок с помощью файла Desktop.ini
В Windows 7 и более поздних версиях можно добавлять глаголы в папку, используя Desktop.ini. Дополнительные сведения о файлах Desktop.ini см. в разделе "Настройка папок с помощью Desktop.ini".
Примечание.
Desktop.ini файлы всегда должны быть помечены как системные + скрытые, чтобы они не отображались пользователям.
Чтобы добавить пользовательские команды для папок через файл Desktop.ini, выполните следующие действия:
Создайте папку, помеченную только для чтения или system.
Создайте файл Desktop.ini, содержащий [. ShellClassInfo] DirectoryClass=Folder ProgID.
В реестре создайте идентификатор progID папки HKEY_CLASSES_ROOT\со значением CanUseForDirectory. Значение CanUseForDirectory позволяет избежать неправильного использования идентификаторов ProgID, которые не участвуют в реализации пользовательских команд для папок через Desktop.ini.
Добавьте глаголы в подраздел "ПапкаProgID", например:
HKEY_CLASSES_ROOT CustomFolderType Shell MyVerb command (Default) = %SystemRoot%\system32\notepad.exe %1\desktop.ini
Примечание.
Эти глаголы могут быть по умолчанию verb, в этом случае двойной щелчок по папке активирует verb.
Связанные темы
-
Рекомендации по обработчикам контекстного меню и нескольким командам выбора
-
Выбор статического или динамического Verb для вашего меню быстрого доступа