Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обработчики контекстного меню, также называемые обработчиками контекстного меню или обработчиками команд, являются типом обработчика типов файлов. Эти обработчики могут быть реализованы таким образом, чтобы они загружались в собственном процессе или в обозревателе или в других сторонних процессах. Обратите внимание на создание обработчиков в процессе выполнения, так как они могут причинить вред процессу, который загружает их.
Примечание.
При регистрации обработчиков, работающих в контексте 32-разрядных приложений на 64-разрядных версиях Windows, нужно учитывать, что система WOW64 перенаправляет доступ файловой системы к некоторым путям при вызове в контексте приложения иной разрядности. Если обработчик .exe хранится в одном из этих путей, он недоступен в этом контексте. Таким образом, в качестве обходного пути либо храните ваш .exe файл в папке, которая не перенаправляется, либо храните заглушку вашего .exe файла, которая запускает реальную версию.
Этот раздел организован следующим образом:
- Канонические глаголы
- Расширенные глаголы
- Глаголы для программного доступа
-
Настройка контекстного меню с помощью статических команд
- Активация обработчика с помощью интерфейса IDropTarget
- Указание позиции и порядка статических глаголов
- Размещение команд в верхней или нижней части меню
- Создание статических каскадных меню
- Получение динамического поведения для статических команд с помощью расширенного синтаксиса запросов
- Устаревшие: ассоциация глаголов с командами обмена данными
- Выполнение задач реализации глаголов
- Связанные статьи
Канонические глаголы
Приложения обычно отвечают за предоставление локализованных строк отображения для определяемых ими команд. Однако для обеспечения степени независимости языка система определяет стандартный набор часто используемых глаголов, называемых каноническими глаголами. Канонический глагол никогда не отображается пользователю и может использоваться с любым языком интерфейса пользователя. Система использует каноническое имя для автоматического создания правильно локализованной отображаемой строки. Например, строке отображения глагола "Open" в английской системе установлено значение Open или его немецкий эквивалент в немецкой системе.
Канонический глагол | Описание |
---|---|
Открыть | Открывает файл или папку. |
Opennew | Открывает файл или папку в новом окне. |
Печать | Выводит файл. |
Printto | Позволяет пользователю распечатать файл, перетащив его в объект принтера. |
Исследовать | Открывает проводник Windows с выбранной папкой. |
Свойства | Открывает лист свойств объекта. |
Примечание.
Глагол Printto тоже является каноническим, но он никогда не отображается. Его включение позволяет пользователю распечатать файл, перетащив его в объект принтера.
Обработчики контекстного меню могут предоставлять собственные канонические команды через IContextMenu::GetCommandString с GCS_VERBW или GCS_VERBA. Система будет использовать канонические команды в качестве второго параметра (lpOperation), переданного ShellExecute, и является CMINVOKECOMMANDINFO.Член lpVerb, переданный методу IContextMenu::InvokeCommand.
Расширенные глаголы
Когда пользователь щелкает объект правой кнопкой мыши, контекстное меню отображает команды по умолчанию. Может потребоваться добавить и поддерживать команды в некоторых контекстных меню, которые не отображаются в каждом контекстном меню. Например, можно использовать команды, которые обычно не используются или предназначены для опытных пользователей. По этой причине можно также определить один или несколько расширенных глаголов. Эти глаголы похожи на обычные глаголы, но отличаются от них по способу их учета. Чтобы получить доступ к расширенным глаголам, пользователь должен щелкнуть правой кнопкой мыши на объекте, удерживая клавишу SHIFT. Когда пользователь делает это, расширенные команды отображаются в дополнение к командам по умолчанию.
Реестр можно использовать для определения одного или нескольких расширенных глаголов. Связанные команды будут отображаться только в том случае, если пользователь щелкает объект правой кнопкой мыши, а также нажимает клавишу SHIFT. Чтобы определить глагол как расширенный, добавьте значение "extended" REG_SZ в подраздел глагола. Значение не должно быть связано с данными.
Глаголы только для программного доступа
Эти глаголы никогда не отображаются в контекстном меню. К этим данным можно получить доступ с помощью ShellExecuteEx и указания поля lpVerb параметра pExecInfo (объекта SHELLEXECUTEINFO). Чтобы определить глагол как доступный только для программного доступа, добавьте значение "ProgrammaticAccessOnly" REG_SZ в подраздел глагола. Значение не должно иметь каких-либо данных, связанных с ним.
Реестр можно использовать для определения одного или нескольких расширенных глаголов. Связанные команды будут отображаться только в том случае, если пользователь щелкает объект правой кнопкой мыши, а также нажимает клавишу SHIFT. Чтобы определить глагол как расширенный, добавьте значение "расширенный" REG_SZ в подраздел глагола. Значение не должно быть связано с данными.
Настройка контекстного меню с помощью статических команд
Выбрав статическую или динамическую команду для контекстного меню, можно расширить контекстное меню для типа файла, зарегистрируя статическую команду для типа файла. Для этого добавьте Shell подраздел ниже подраздела для ProgID приложения, связанного с типом файла. При желании вы можете задать глагол по умолчанию для типа файла, установив его в качестве значения по умолчанию для подраздела Shell.
Глагол по умолчанию отображается первым в контекстном меню. Его цель — предоставить оболочку глаголом, который она может использовать при вызове функции ShellExecuteEx, если глагол не указан. Оболочка не обязательно выбирает глагол по умолчанию, если ShellExecuteEx используется подобным образом.
Оболочка использует первый доступный глагол в следующем порядке:
- Глагол по умолчанию
- Первый глагол в реестре, если указан порядок следования глаголов
- Команда Open
- Команда Open With
Если ни одна из перечисленных команд не доступна, операция завершается ошибкой.
Создайте один подраздел для каждого глагола, который вы хотите добавить в подраздел Shell. Каждый из этих подразделов должен иметь значение типа REG_SZ для строки отображения глагола (локализованной строки). Для каждого подраздела команды создайте подраздел команды со значением по умолчанию, заданным в командной строке для активации элементов. Для канонических команд, таких как Open and Print, можно опустить отображаемую строку, так как система автоматически отображает правильно локализованную строку. Для неканонических глаголов, если вы упустите отображаемую строку, отображается строка глагола.
В следующем примере реестра обратите внимание, что:
- Так как Doit не является каноническим глаголом, ему назначается отображаемое имя, которое можно выбрать, нажав клавишу D.
- Команда Printto не отображается в контекстном меню. Однако его включение в реестр позволяет пользователю печатать файлы, сбрасывая их на значок принтера.
- Для каждого глагола отображается один подключ. %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"
На следующей схеме показано расширение контекстного меню в соответствии с приведенными выше записями реестра. Это контекстное меню содержит команды "Открыть", "Do It" и "Печать " в меню, используя команду Do It в качестве команды по умолчанию.
Активация вашего обработчика событий с помощью интерфейса 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
Размещение команд в верхней или нижней части меню
Следующий атрибут реестра можно использовать для размещения команды в верхней или нижней части меню. Если несколько глаголов указывают этот атрибут, то приоритет получает последний из них.
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
В случае пользовательских глаголов реализуйте их с помощью любого из методов статической реализации глагола и перечислите их в подразделе CommandStore, как показано в этом примере для вымышленного глагола VerbName:
HKEY_LOCAL_MACHINE Software Microsoft Windows CurrentVersion Explorer CommandStore Shell VerbName command (Default) = notepad.exe %1
Примечание.
Этот метод имеет то преимущество, что пользовательские глаголы можно зарегистрировать один раз и повторно использовать, указав имя глагола в записи 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 является пустым и отображается как (значение не задано).
Заполните подглаголы, используя любую из следующих реализаций статических глаголов. Обратите внимание, что подраздел 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 и более поздних версиях можно предоставить ту же реализацию глагола с помощью IExplorerCommand, что и с помощью IContextMenu.
На следующих двух снимках экрана показано использование каскадных меню в папке "Устройства ".
На следующем снимке экрана показана другая реализация каскадного меню в папке "Устройства ".
Примечание.
Так как IExplorerCommand поддерживает только внутрипроцессную активацию, рекомендуется использовать источниками данных оболочки, которые должны совместно использовать реализацию между командами и контекстными меню.
Получение динамического поведения для статических команд с помощью расширенного синтаксиса запросов
Расширенный синтаксис запросов (AQS) может выразить условие, которое будет оцениваться по свойствам элемента, для которого создается экземпляр глагола. Эта система работает только с быстрыми свойствами. Это свойства, которые источник данных оболочки сообщает как быстрые, не возвращая SHCOLSTATE_SLOW из IShellFolder2::GetDefaultColumnState.
Windows 7 и более поздних версий поддерживают канонические значения, которые позволяют избежать проблем с локализованными сборками. Следующий канонический синтаксис необходим для локализованных сборок, чтобы воспользоваться этим усовершенствованием Windows 7.
System.StructuredQueryType.Boolean#True
В следующем примере записи реестра:
- Значение AppliesTo определяет, отображается ли глагол или скрыт.
- Значение DefaultAppliesTo определяет, какой глагол является глаголом по умолчанию.
- Значение HasLUAShield управляет тем, отображается ли значок щита контроля учетных записей пользователей (UAC).
В этом примере значение 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"
Добавьте подключ 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.
Расширение нового подменю
Когда пользователь открывает меню "Файл " в проводнике Windows, отображается одна из команд: "Создать". При выборе этой команды отображается подменю. По умолчанию подменю содержит две команды, Папка и Ярлык, которые позволяют пользователям создавать вложенные папки и ярлыки. Этот подменю можно расширить, чтобы включить команды создания файлов для любого типа файла.
Чтобы добавить команду создания файла в подменю New , файлы приложения должны иметь связанный тип файла. Добавьте вложенный ключ ShellNew в имя файла. При выборе команды "Создать файл" оболочка добавляет тип файла в подменю New. Отображаемая строка команды — это описательная строка, назначенная 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 , оболочка создает файл с именем New MyProgram Application.myp-ms и передает его в MyProgram.exe.
Создание обработчиков перетаскивания
Базовая процедура реализации обработчика перетаскивания аналогична обычным обработчикам контекстного меню. Однако обработчики контекстного меню обычно используют только указатель IDataObject, передаваемый методу IShellExtInit::Initialize для извлечения имени объекта. Обработчик перетаскивания может реализовать более сложный обработчик данных для изменения поведения перетаскиваемого объекта.
Когда пользователь щелкает правой кнопкой мыши на объекте оболочки для его перетаскивания, при попытке отпустить объект отображается контекстное меню. На следующем снимке экрана показано типичное контекстное меню перетаскивания.
Обработчик перетаскивания — это обработчик контекстного меню, который может добавлять элементы в это контекстное меню. Обработчики перетаскивания обычно регистрируются в следующем подразделе.
HKEY_CLASSES_ROOT
Directory
shellex
DragDropHandlers
Добавьте подключ под DragDropHandlers с именем обработчика перетаскивания и задайте значение по умолчанию этого подключа в строковое представление идентификатора класса обработчика (CLSID). В следующем примере включается обработчик перетаскивания MyDD .
HKEY_CLASSES_ROOT
Directory
shellex
DragDropHandlers
MyDD
(Default) = {MyDD CLSID GUID}
Подавление глаголов и управление видимостью
Параметры политики Windows можно использовать для управления видимостью глагола. Глаголы можно подавлять с помощью параметров политики, добавив значение SuppressionPolicy или значение GUID SuppressionPolicyEx в подраздел реестра глагола. Задайте для подраздела SuppressionPolicy значение идентификатора политики. Если параметр включен, глагол и соответствующая запись в контекстном меню подавляются. Возможные значения идентификаторов политики см. в перечислении RESTRICTIONS .
Использование модели выбора глагола
Значения реестра должны быть заданы для обработки ситуаций, когда пользователь может выбрать один элемент, несколько элементов или произвести выбор внутри элемента. Для глагола требуются отдельные значения реестра для каждой из этих трех ситуаций, поддерживаемых глаголом. Возможные значения для модели выбора глаголов приведены следующим образом:
- Укажите значение MultiSelectModel для всех глаголов. Если значение MultiSelectModel не указано, оно выводится из выбранного типа реализации команды. Предполагается, что для методов на основе COM (например, DropTarget и ExecuteCommand) используется проигрыватель , а для других методов — Document .
- Укажите одиночный для глаголов, поддерживающих только один вариант выбора.
- Укажите Player для глаголов, поддерживающих любое количество элементов.
- Укажите документ для команд, создающих окно верхнего уровня для каждого элемента. Это ограничивает количество активированных элементов и помогает избежать превышения системных ресурсов, если пользователь открывает слишком много окон.
Если количество выбранных элементов не соответствует модели выбора команд или больше ограничений по умолчанию, описанных в следующей таблице, команда не отображается.
Тип реализации глагола | Документ | Игрок |
---|---|---|
Наследие | 15 элементов | 100 элементов |
COM | 15 элементов | Без ограничений |
Ниже приведены примеры записей реестра с помощью значения MultiSelectModel.
HKEY_CLASSES_ROOT
Folder
shell
open
= MultiSelectModel = Document
HKEY_CLASSES_ROOT
ProgID
shell
verb
= MultiSelectModel = Single | Document | Player
Использование атрибутов элементов
Значения флага SFGAO атрибутов оболочки элемента можно проверить, чтобы определить, следует ли активировать или деактивировать действие.
Чтобы использовать эту функцию атрибута, добавьте следующие значения REG_DWORD под глаголом:
- Значение 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
Примечание.
Эти глаголы могут быть глаголами по умолчанию, в этом случае двойной щелчок по папке активирует глагол.
Связанные темы
-
Рекомендации по обработчикам контекстного меню и нескольким командам выбора
-
Выбор статической или динамической команды для контекстного меню