Documente Academic
Documente Profesional
Documente Cultură
7 Nota
Verbos canónicos
Verbos Extendidos
Personalizar un menú contextual utilizando verbos estáticos
Activación de su controlador utilizando la interfaz IDropTarget
Especificar la posición y el orden de los verbos estáticos
Posicionar verbos en la parte superior o inferior del menú
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 1/22
2/11/2019 Creación de controladores de menú de acceso directo - Aplicaciones Win32 | Documentos de Microsoft
Verbos canónicos
Las aplicaciones son generalmente responsables de proporcionar cadenas de visualización
localizadas para los verbos que definen. Sin embargo, para proporcionar un grado de
independencia del lenguaje, el sistema define un conjunto estándar de verbos de uso común
llamados verbos canónicos. Un verbo canónico nunca se muestra al usuario y se puede usar
con cualquier lenguaje de interfaz de usuario. El sistema utiliza el nombre canónico para
generar automáticamente una cadena de visualización correctamente localizada. Por
ejemplo, la cadena de visualización del verbo abierto se establece en Abrir en un sistema
inglés y en el equivalente alemán en un sistema alemán.
Verbo
canónico Descripción
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 2/22
2/11/2019 Creación de controladores de menú de acceso directo - Aplicaciones Win32 | Documentos de Microsoft
7 Nota
Los controladores del menú contextual pueden proporcionar sus propios verbos canónicos a
través de IContextMenu :: GetCommandString con GCS_VERBW o GCS_VERBA . El
sistema usará los verbos canónicos como el segundo parámetro ( lpOperation ) pasado a
ShellExecute , y es el CMINVOKECOMMANDINFO . El miembro lpVerb pasó al método
IContextMenu :: InvokeCommand .
Verbos Extendidos
Cuando el usuario hace clic con el botón derecho en un objeto, el menú contextual muestra
los verbos predeterminados. Es posible que desee agregar y admitir comandos en algunos
menús contextuales que no se muestran en todos los menús contextuales. Por ejemplo,
podría tener comandos que no se usan comúnmente o que están destinados a usuarios
experimentados. Por esta razón, también puede definir uno o más verbos extendidos. Estos
verbos son similares a los verbos normales, pero se distinguen de los verbos normales por la
forma en que están registrados. Para tener acceso a verbos extendidos, el usuario debe hacer
clic con el botón derecho en un objeto mientras presiona la tecla MAYÚS. Cuando el usuario
lo hace, se muestran los verbos extendidos además de los verbos predeterminados.
Puede usar el registro para definir uno o más verbos extendidos. Los comandos asociados se
mostrarán solo cuando el usuario haga clic con el botón derecho en un objeto mientras
presiona la tecla MAYÚS. Para definir un verbo como extendido, agregue un valor
"extendido" REG_SZ a la subclave del verbo. El valor no debe tener ningún dato asociado.
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 3/22
2/11/2019 Creación de controladores de menú de acceso directo - Aplicaciones Win32 | Documentos de Microsoft
1. El verbo predeterminado
2. El primer verbo en el registro, si se especifica el orden del verbo
3. El verbo abierto
4. El verbo abierto con
Cree una subclave para cada verbo que desee agregar debajo de la subclave Shell. Cada una
de estas subclaves debe tener un valor REG_SZ establecido en la cadena de visualización del
verbo (cadena localizada). Para cada subclave verbal, cree una subclave de comando con el
valor predeterminado establecido en la línea de comando para activar los elementos. Para los
verbos canónicos, como Abrir e Imprimir , puede omitir la cadena de visualización porque el
sistema muestra automáticamente una cadena correctamente localizada. Para verbos no
canónicos, si omite la cadena de visualización, se muestra la cadena de verbo.
Como Doit no es un verbo canónico, se le asigna un nombre para mostrar, que puede
seleccionarse presionando la tecla D.
El verbo Printto no aparece en el menú contextual. Sin embargo, su inclusión en el
registro permite al usuario imprimir archivos colocándolos en un icono de impresora.
Se muestra una subclave para cada verbo. % 1 representa el nombre del archivo y % 2
el nombre de la impresora.
= Copiar
HKEY_CLASSES_ROOT
.myp-ms
(Default) = MyProgram.1
MyProgram.1
(Default) = My Program Application
Shell
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 4/22
2/11/2019 Creación de controladores de menú de acceso directo - Aplicaciones Win32 | Documentos de Microsoft
(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"
El siguiente diagrama ilustra la extensión del menú contextual de acuerdo con las entradas de
registro anteriores. Este menú contextual tiene los verbos Abrir , Hacer e Imprimir en su
menú, con Hacerlo como verbo predeterminado.
objeto de datos que se puede convertir en una matriz de elementos mediante la función
SHCreateShellItemArrayFromDataObject . Hacerlo es más simple y no pierde la
información del espacio de nombres como ocurre cuando el elemento se convierte en una
ruta para la línea de comandos o los protocolos DDE.
Para obtener más información sobre IDropTarget y consultas de Shell para los atributos de
asociación de archivos, consulte Tipos percibidos y registro de aplicaciones .
Por ejemplo, la siguiente entrada del registro produce verbos de menú contextual en el
siguiente orden:
1. Monitor
2. Artilugio
3. Personalización
= Copiar
HKEY_CLASSES_ROOT
DesktopBackground
Shell
Display
Gadgets
Personalization
Del mismo modo, la siguiente entrada del registro produce verbos de menú contextual en el
siguiente orden:
1. Personalización
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 6/22
2/11/2019 Creación de controladores de menú de acceso directo - Aplicaciones Win32 | Documentos de Microsoft
2. Artilugio
3. Monitor
= Copiar
HKEY_CLASSES_ROOT
DesktopBackground
Shell = "Personalization,Gadgets"
Display
El siguiente atributo de registro se puede usar para colocar un verbo en la parte superior o
inferior del menú. Si hay varios verbos que especifican este atributo, el último en hacerlo
tendrá prioridad:
sintaxis = Copiar
Position=Top | Bottom
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 7/22
2/11/2019 Creación de controladores de menú de acceso directo - Aplicaciones Win32 | Documentos de Microsoft
= Copiar
HKEY_CLASSES_ROOT
*
shell
CascadeTest
(Default)
= Copiar
HKEY_CLASSES_ROOT
*
shell
CascadeTest
(Default)
MUIVerb = Test Cascade Menu
= Copiar
HKEY_CLASSES_ROOT
*
Shell
CascadeTest
SubCommands
Windows.delete;Windows.properties;Windows.rename;Windows.cu
t;Windows.copy;Windows.paste
= Copiar
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
Explorer
CommandStore
Shell
VerbName
command
(Default) = notepad.exe %1
7 Nota
Este método tiene la ventaja de que los verbos personalizados pueden registrarse una
vez y reutilizarse enumerando el nombre del verbo en la entrada Subcomandos. Sin
embargo, requiere que la aplicación tenga permiso para modificar el registro en
HKEY_LOCAL_MACHINE .
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 9/22
2/11/2019 Creación de controladores de menú de acceso directo - Aplicaciones Win32 | Documentos de Microsoft
= Copiar
HKEY_CLASSES_ROOT
*
shell
CascadeTest2
(Default)
= Copiar
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 10/22
2/11/2019 Creación de controladores de menú de acceso directo - Aplicaciones Win32 | Documentos de Microsoft
HKEY_CLASSES_ROOT
*
shell
CascadeTest
(Default)
MUIVerb = Test Cascade Menu 2
= Copiar
HKEY_CLASSES_ROOT
txtfile
Shell
Test Cascade Menu 2
(Default)
ExtendedSubCommandsKey
Layout
Properties
Select all
= Copiar
HKEY_CLASSES_ROOT
txtile
Shell
Test Cascade Menu 2
(Default)
ExtendedSubCommandsKey
Shell
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 11/22
2/11/2019 Creación de controladores de menú de acceso directo - Aplicaciones Win32 | Documentos de Microsoft
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
Las siguientes dos capturas de pantalla ilustran el uso de menús en cascada en la carpeta
Dispositivos .
7 Nota
La sintaxis de consulta avanzada (AQS) puede expresar una condición que se evaluará
utilizando las propiedades del elemento para el que se está instanciando el verbo. Este
sistema funciona solo con propiedades rápidas. Estas son propiedades que el origen de datos
de Shell informa tan rápido al no devolver SHCOLSTATE_SLOW de IShellFolder2 ::
GetDefaultColumnState .
Windows 7 y versiones posteriores admiten valores canónicos que evitan problemas en las
compilaciones localizadas. Se requiere la siguiente sintaxis canónica en las compilaciones
localizadas para aprovechar esta mejora de Windows 7.
sintaxis = Copiar
System.StructuredQueryType.Boolean#True
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 13/22
2/11/2019 Creación de controladores de menú de acceso directo - Aplicaciones Win32 | Documentos de Microsoft
En este ejemplo, el valor DefaultAppliesTo hace que este verbo sea el predeterminado para
cualquier archivo con la palabra "exampleText1" en su nombre de archivo. El valor
AppliesTo habilita el verbo para cualquier archivo con "exampleText1" en el nombre. El valor
HasLUAShield muestra el escudo de los archivos con "exampleText2" en el nombre.
= Copiar
HKEY_CLASSES_ROOT
txtile
shell
test.verb
DefaultAppliesTo = System.ItemName:"exampleText1"
HasLUAShield = System.ItemName:"exampleText2"
AppliesTo = System.ItemName:"exampleText1"
= Copiar
HKEY_CLASSES_ROOT
txtile
shell
test.verb
Command
(Default) = %SystemRoot%\system32\notepad.exe %1
AppliesTo = System.Volume.BitlockerProtection: = 2
System.Volume.BitlockerRequiresAdmin: = System.StructuredQueryType.Boolean #
True
Para obtener más información sobre AQS, consulte Sintaxis de consulta avanzada .
DDE está en desuso; use IDropTarget en su lugar. DDE está en desuso porque se basa en un
mensaje de ventana de difusión para descubrir el servidor DDE. Un bloqueo del servidor DDE
detiene el mensaje de la ventana de difusión y, por lo tanto, bloquea las conversaciones DDE
para otras aplicaciones. Es común que una sola aplicación atascada provoque bloqueos
posteriores en toda la experiencia del usuario.
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 14/22
2/11/2019 Creación de controladores de menú de acceso directo - Aplicaciones Win32 | Documentos de Microsoft
El método IDropTarget es más robusto y tiene un mejor soporte de activación porque utiliza
la activación COM del controlador. En el caso de la selección de elementos múltiples,
IDropTarget no está sujeto a las restricciones de tamaño del búfer que se encuentran tanto
en DDE como en CreateProcess . Además, los elementos se pasan a la aplicación como un
objeto de datos que se puede convertir en una matriz de elementos mediante la función
SHCreateShellItemArrayFromDataObject . Hacerlo es más simple y no pierde la
información del espacio de nombres como ocurre cuando el elemento se convierte en una
ruta para la línea de comandos o los protocolos DDE.
Para obtener más información sobre IDropTarget y consultas de Shell para los atributos de
asociación de archivos, consulte Tipos percibidos y registro de aplicaciones .
Muchos objetos Shell predefinidos tienen menús contextuales que se pueden personalizar.
Registre el comando de la misma manera que registra los tipos de archivo típicos, pero use el
nombre del objeto predefinido como el nombre del tipo de archivo.
del nombre del archivo. Cuando se selecciona el comando Nuevo del menú Archivo , el
Shell agrega el tipo de archivo al nuevo submenú. La cadena de visualización del comando
es la cadena descriptiva que se asigna al ProgID del programa.
Para especificar el método de creación de archivos, asigne uno o más valores de datos a la
subclave ShellNew . Los valores disponibles se enumeran en la siguiente tabla.
Shell Nuevo
valor de
subclave Descripción
Mando Ejecuta una aplicación. Este valor REG_SZ especifica la ruta de la aplicación que
se ejecutará. Por ejemplo, puede configurarlo para iniciar un asistente.
Datos Crea un archivo que contiene datos específicos. Este valor REG_BINARY
especifica los datos del archivo. Los datos se ignoran si se especifica NullFile o
FileName .
Nombre del Crea un archivo que es una copia de un archivo especificado. Este valor REG_SZ
archivo especifica la ruta de acceso completa del archivo que se copiará.
= Copiar
HKEY_CLASSES_ROOT
.myp
(Default) = MyProgram.1
MyProgram.1
ShellNew
NullFile
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 16/22
2/11/2019 Creación de controladores de menú de acceso directo - Aplicaciones Win32 | Documentos de Microsoft
Cuando un usuario hace clic con el botón derecho en un objeto Shell para arrastrar un
objeto, se muestra un menú contextual cuando el usuario intenta soltar el objeto. La siguiente
captura de pantalla ilustra un típico menú contextual de arrastrar y soltar.
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 17/22
2/11/2019 Creación de controladores de menú de acceso directo - Aplicaciones Win32 | Documentos de Microsoft
= Copiar
HKEY_CLASSES_ROOT
Directory
shellex
DragDropHandlers
= Copiar
HKEY_CLASSES_ROOT
Directory
shellex
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 18/22
2/11/2019 Creación de controladores de menú de acceso directo - Aplicaciones Win32 | Documentos de Microsoft
DragDropHandlers
MyDD
(Default) = {MyDD CLSID GUID}
Los valores de registro deben establecerse para que los verbos manejen situaciones en las
que un usuario puede seleccionar un solo elemento, múltiples elementos o una selección de
un elemento. Un verbo requiere valores de registro separados para cada una de estas tres
situaciones que admite el verbo. Los valores posibles para el modelo de selección de verbos
son los siguientes:
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 19/22
2/11/2019 Creación de controladores de menú de acceso directo - Aplicaciones Win32 | Documentos de Microsoft
Las siguientes son entradas de registro de ejemplo que usan el valor MultiSelectModel.
= Copiar
HKEY_CLASSES_ROOT
Folder
shell
open
= MultiSelectModel = Document
= Copiar
HKEY_CLASSES_ROOT
ProgID
shell
verb
= MultiSelectModel = Single | Document | Player
Los valores del indicador SFGAO de los atributos de Shell para un elemento se pueden
probar para determinar si el verbo se debe habilitar o deshabilitar.
To use this attribute feature, add the following the REG_DWORD values under the verb:
The AttributeMask value specifies the SFGAO value of the bit values of the mask to test
with.
The AttributeValue value specifies the SFGAO value of the bits that are tested.
The ImpliedSelectionModel specifies zero for item verbs, or nonzero for verbs on the
background shortcut menu.
= Copy
HKEY_CLASSES_ROOT
txtfile
Shell
test.verb2
AttributeMask = 0x40000
AttributeValue = 0x0
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 20/22
2/11/2019 Creación de controladores de menú de acceso directo - Aplicaciones Win32 | Documentos de Microsoft
ImpliedSelectionModel = 0x0
command
(Default) = %SystemRoot%\system32\notepad.exe %1
In Windows 7 and later, you can add verbs to a folder through Desktop.ini. For more
information about Desktop.ini files, see How to Customize Folders with Desktop.ini.
7 Note
To add custom verbs for folders through a Desktop.ini file, perform the following
steps:
= Copy
HKEY_CLASSES_ROOT
CustomFolderType
Shell
MyVerb
command
(Default) = %SystemRoot%\system32\notepad.exe
%1\desktop.ini
7 Note
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 21/22
2/11/2019 Creación de controladores de menú de acceso directo - Aplicaciones Win32 | Documentos de Microsoft
Estos verbos pueden ser el verbo predeterminado, en cuyo caso al hacer doble clic en la
carpeta se activa el verbo.
Temas relacionados
Mejores prácticas para controladores de menú de acceso directo y verbos de selección
múltiple
Yes No
https://docs.microsoft.com/en-us/windows/win32/shell/context-menu-handlers 22/22