Compartir a través de


Creación de controladores de menús contextuales

Los controladores de menú de acceso directo, también conocidos como controladores de menú contextual o verb controladores, son un tipo de controlador de tipo de archivo. Estos controladores se pueden implementar de una manera que les haga cargar en su propio proceso o en el explorador, u otros procesos de terceros. Tenga cuidado al crear controladores en proceso, ya que pueden causar daños en el proceso que los carga.

Nota:

Hay consideraciones especiales para las versiones basadas en 64 bits de Windows al registrar controladores que funcionan en el contexto de aplicaciones de 32 bits: cuando se invoca en el contexto de una aplicación de bits diferente, el subsistema WOW64 redirige el acceso del sistema de archivos a algunas rutas de acceso. Si el controlador .exe se almacena en una de esas rutas de acceso, no es accesible en este contexto. Por lo tanto, como solución alternativa, almacene el .exe en una ruta de acceso que no se redirija o almacene una versión de código auxiliar del .exe que inicie la versión real.

Este tema se organiza de la siguiente manera:

Verbos canónicos

Las aplicaciones suelen ser 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 usados comúnmente denominados verbos canónicos. Un elemento canónico verb nunca se muestra al usuario y puede usarse con cualquier idioma de la interfaz de usuario. El sistema usa el nombre canónico para generar automáticamente una cadena de visualización localizada correctamente. Por ejemplo, la cadena de visualización de verb se establece en Abrir en un sistema inglés y en el equivalente alemán en un sistema alemán.

Canónico verb Descripción
Open Abre el archivo o la carpeta.
Opennew Abre el archivo o la carpeta en una nueva ventana.
Print Imprime el archivo.
Printto Permite al usuario imprimir un archivo arrastrándolo a un objeto de impresora.
Explore Abre el Explorador de Windows con la carpeta seleccionada.
Properties Abre la hoja de propiedades del objeto.

Nota:

El Printtoverb también es canónico, aunque nunca se muestra. Su inclusión permite al usuario imprimir un archivo arrastrándolo a un objeto de impresora.

Los controladores de 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 segundo parámetro (lpOperation) pasado a ShellExecute y es el CMINVOKECOMMANDINFO.miembro lpVerb pasado 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 normalmente o que están diseñados para usuarios experimentados. Por este motivo, también puede definir uno o varios verbos extendidos. Estos verbos son similares a los verbos normales, pero se distinguen de los verbos normales de la manera en que se registran. 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 varios verbos extendidos. Los comandos asociados solo se mostrarán cuando el usuario haga clic con el botón derecho en un objeto mientras presiona la tecla MAYÚS. Para definir un verb como extendido, agregue un valor "extendido" REG_SZ a la subclave de verb. El valor no debe tener ningún dato asociado.

Solo verbos de acceso mediante programación

Estos verbos nunca se muestran en un menú contextual. Se puede acceder a ellos mediante ShellExecuteEx y especificando el campo lpVerb del parámetro pExecInfo (un objeto SHELLEXECUTEINFO ). Para definir un verb como acceso exclusivamente por programación, agregue un valor "ProgrammaticAccessOnly" REG_SZ a la subclave del verb. El valor no debe tener ningún dato asociado.

Puede usar el Registro para definir uno o varios verbos extendidos. Los comandos asociados solo se mostrarán cuando el usuario haga clic con el botón derecho en un objeto mientras presiona la tecla MAYÚS. Para definir un verb como extendido, agregue un valor REG_SZ "extendido" a la subclave de verb. El valor no debe tener ningún dato asociado.

Personalización de un menú contextual mediante verbos estáticos

Después de elegir un estático o dinámico Verb para el menú contextual , puede ampliar el menú contextual de un tipo de archivo registrando un estático verb para el tipo de archivo. Para ello, agregue una Shell subclave debajo de la subclave para el ProgID de la aplicación asociada con el tipo de archivo. Opcionalmente, puede definir un valor predeterminado verb para el tipo de archivo si lo convierte en el valor predeterminado de la Shell subclave.

El valor predeterminado verb se muestra primero en el menú contextual. Su propósito es proporcionar al Shell un verb que puede usar cuando se llama a la función ShellExecuteEx, pero no se especifica verb. El Shell no selecciona necesariamente el verb predeterminado cuando ShellExecuteEx se usa de esta manera.

Shell usa el primero disponible verb en el orden siguiente:

  1. Valor predeterminado verb
  2. La primera verb del registro, si se especifica el verb orden.
  3. El Openverb
  4. El Open Withverb

Si ninguno de los verbos enumerados está disponible, se produce un error en la operación.

Cree una clave secundaria para cada verb que quiera agregar en la Shell subclave. Cada una de estas subclaves debe tener un valor REG_SZ establecido en la verbcadena de visualización (cadena localizada). Para cada verb subclave, cree una subclave de comandos con el valor predeterminado establecido en la línea de comandos para activar los elementos. En el caso de verbos canónicos, como Open y Print, puede omitir la cadena de visualización porque el sistema muestra automáticamente una cadena localizada correctamente. En el caso de los verbos no canónicos, si se omite la cadena de visualización, se muestra la cadena verb.

En el ejemplo del Registro siguiente, tenga en cuenta que:

  • Dado que Doit no es canónico verb, se le asigna un nombre para mostrar, que se puede seleccionar presionando la tecla D.
  • Printtoverb no aparece en el menú contextual. Sin embargo, su inclusión en el Registro permite al usuario imprimir archivos colocandolos en un icono de impresora.
  • Se muestra una subclave para cada verb. %1 representa el nombre de archivo y %2 el nombre de la impresora.
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"

En el diagrama siguiente se muestra la extensión del menú contextual de acuerdo con las entradas del Registro anteriores. Este menú contextual tiene Open, Do It y Print en su menú, con Do It como valor predeterminado verb.

captura de pantalla del menú contextual predeterminado verb de do it

Activación del controlador mediante la interfaz IDropTarget

El intercambio dinámico de datos (DDE) está en desuso; use IDropTarget en su lugar. IDropTarget es más sólido y tiene una mejor compatibilidad con la activación porque usa la activación COM del controlador. En el caso de la selección de varios elementos, IDropTarget no está sujeto a las restricciones de tamaño de búfer que se encuentran en DDE y 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. Esto es más sencillo y no pierde la información del espacio de nombres tal como ocurre cuando el elemento se convierte en una ruta de acceso para los protocolos de línea de comandos o DDE.

Para obtener más información sobre IDropTarget y Shell las consultas de atributos de asociación de archivos, vea Tipos percibidos y registro de aplicaciones.

Especificar la posición y el orden de los verbos estáticos

Normalmente, los verbos se ordenan en un menú contextual en función de cómo se enumeran; la enumeración se basa primero en el orden de la matriz de asociación y, a continuación, en el orden de los elementos de la matriz de asociación, tal como se define en el criterio de ordenación del registro.

Los verbos se pueden ordenar especificando el valor predeterminado de la Shell subclave para la entrada de asociación. Este valor predeterminado puede incluir un solo elemento, que se mostrará en la posición superior del menú contextual o una lista de elementos separados por espacios o comas. En este último caso, el primer elemento de la lista es el elemento predeterminado y los otros verbos se muestran inmediatamente debajo del orden especificado.

Por ejemplo, la siguiente entrada del Registro genera verbos de menú contextual en el orden siguiente:

  1. Mostrar
  2. Dispositivos
  3. Personalización
HKEY_CLASSES_ROOT
   DesktopBackground
      Shell
         Display
         Gadgets
         Personalization

Del mismo modo, la siguiente entrada del Registro genera verbos de menú contextual en el orden siguiente:

  1. Personalización
  2. Dispositivos
  3. Mostrar
HKEY_CLASSES_ROOT
   DesktopBackground
      Shell = "Personalization,Gadgets"
      Display

Posicionamiento de verbos en la parte superior o inferior del menú

El siguiente atributo del Registro se puede usar para colocar un verb elemento en la parte superior o inferior del menú. Si hay varios verbos que especifican este atributo, el último para hacerlo obtiene prioridad:

Position=Top | Bottom 

Crear menús estáticos en cascada

En Windows 7 y versiones posteriores, se admite la implementación del menú en cascada a través de la configuración del Registro. Antes de Windows 7, la creación de menús en cascada solo era posible a través de la implementación de la interfaz IContextMenu. En Windows 7 y versiones posteriores, debes recurrir a soluciones basadas en código COM solo cuando los métodos estáticos no sean suficientes.

La captura de pantalla siguiente proporciona un ejemplo de un menú en cascada.

captura de pantalla que muestra un ejemplo de un menú en cascada

En Windows 7 y versiones posteriores, hay tres maneras de crear menús en cascada:

Crear menús en cascada con la entrada del Registro SubCommands

En Windows 7 y versiones posteriores, puedes usar la entrada SubCommands para crear menús en cascada mediante el procedimiento siguiente.

Para crear un menú en cascada mediante la entrada SubCommands

  1. Cree una subclave en HKEY_CLASSES_ROOT\ProgID\shell para representar el menú en cascada. En este ejemplo, asignamos a esta subclave el nombre CascadeTest. Asegúrese de que el valor predeterminado de la subclave CascadeTest esté vacío y que se muestre como (valor no establecido).

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
    
  2. En la subclave CascadeTest , agregue una entrada MUIVerb de tipo REG_SZ y asígnele el texto que aparecerá como su nombre en el menú contextual. En este ejemplo, se le asigna "Test Cascade Menu".

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
                MUIVerb = Test Cascade Menu
    
  3. En la subclave CascadeTest , agregue una entrada SubCommands de tipo REG_SZ que se asigna a la lista, delimitada por punto y coma, de los verbos que deben aparecer en el menú, en el orden de apariencia. Por ejemplo, aquí asignamos un número de verbos proporcionados por el sistema:

    HKEY_CLASSES_ROOT
       *
          Shell
             CascadeTest
                SubCommands
                Windows.delete;Windows.properties;Windows.rename;Windows.cut;Windows.copy;Windows.paste
    
  4. En el caso de verbos personalizados, impleméntelos mediante cualquiera de los métodos de implementación estáticos verb y enumerelos en la subclave CommandStore, como se muestra en este ejemplo para verbName ficticioverb:

    HKEY_LOCAL_MACHINE
       Software
          Microsoft
             Windows
                CurrentVersion
                   Explorer
                      CommandStore
                         Shell
                            VerbName
                            command
                               (Default) = notepad.exe %1
    

Nota:

Este método tiene la ventaja de que los verbos personalizados se pueden registrar una vez y reutilizarlos enumerando el verb nombre en la entrada SubCommands. Sin embargo, requiere que la aplicación tenga permiso para modificar el registro en HKEY_LOCAL_MACHINE.

 

Crear menús en cascada con la entrada del Registro ExtendedSubCommandsKey

En Windows 7 y versiones posteriores, puedes usar la entrada ExtendedSubCommandKey para crear menús extendidos en cascada: menús en cascada dentro de menús en cascada.

La captura de pantalla siguiente es un ejemplo de un menú en cascada extendido.

captura de pantalla que muestra el menú en cascada extendido para dispositivos

Dado que HKEY_CLASSES_ROOT es una combinación de HKEY_CURRENT_USER y HKEY_LOCAL_MACHINE, puede registrar cualquier verbo personalizado en la subclave clases de software de HKEY_CURRENT_USER\\. La principal ventaja de hacerlo es que no se requiere el permiso con privilegios elevados. Además, otras asociaciones de archivos pueden reutilizar todo este conjunto de verbos especificando la misma subclave ExtendedSubCommandsKey. Si no necesita volver a usar este conjunto de verbos, puede enumerar los verbos en el elemento primario, pero asegurarse de que el valor predeterminado del elemento primario está vacío.

Para crear un menú en cascada mediante una entrada ExtendedSubCommandsKey

  1. Cree una subclave en HKEY_CLASSES_ROOT\ProgID\shell para representar el menú en cascada. En este ejemplo, asignamos a esta subclave el nombre CascadeTest2. Asegúrese de que el valor predeterminado de la subclave CascadeTest esté vacío y que se muestre como (valor no establecido).

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest2
                (Default)
    
  2. En la subclave CascadeTest , agregue una entrada MUIVerb de tipo REG_SZ y asígnele el texto que aparecerá como su nombre en el menú contextual. En este ejemplo, se le asigna "Test Cascade Menu".

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
                MUIVerb = Test Cascade Menu 2
    
  3. En la subclave CascadeTest que ha creado, agregue una subclave ExtendedSubCommandsKey y agregue los subcomandos del documento (de REG_SZ tipo); por ejemplo:

    HKEY_CLASSES_ROOT
       txtfile
          Shell
             Test Cascade Menu 2
                (Default)
                ExtendedSubCommandsKey
                   Layout
                   Properties
                   Select all
    

    Asegúrese de que el valor predeterminado de la subclave Menú de cascada de prueba 2 está vacío y se muestra como (valor no establecido).

  4. Rellene los subverbs mediante cualquiera de las siguientes implementaciones estáticas verb . Tenga en cuenta que la subclave CommandFlags representa valores EXPCMDFLAGS. Si desea agregar un separador antes o después del elemento de menú en cascada, use ECF_SEPARATORBEFORE (0x20) o ECF_SEPARATORAFTER (0x40). Para obtener una descripción de estas marcas de Windows 7 y posteriores, consulta IExplorerCommand::GetFlags. ECF_SEPARATORBEFORE solo funciona para los elementos de menú de nivel superior. MUIVerb es de tipo REG_SZ y CommandFlags es de tipo 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
    

La captura de pantalla siguiente es una ilustración de los ejemplos de entrada de clave del Registro anteriores.

captura de pantalla que muestra un ejemplo de un menú en cascada que muestra las opciones del Bloc de notas y el bloc de palabras

Crear menús en cascada con la interfaz IExplorerCommand

Otra opción para agregar verbos a un menú en cascada es a través de IExplorerCommand::EnumSubCommands. Este método permite que los orígenes de datos que proporcionen sus comandos de módulo de comandos a través de IExplorerCommandProvider usen esos comandos como verbos en un menú contextual. En Windows 7 y versiones posteriores, puedes proporcionar la misma verb implementación con IExplorerCommand que puedes con IContextMenu.

Las dos capturas de pantalla siguientes muestran el uso de menús en cascada en la carpeta Dispositivos .

Captura de pantalla que muestra un ejemplo de un menú en cascada en la carpeta devices.

La captura de pantalla siguiente muestra otra implementación de un menú en cascada en la carpeta Dispositivos .

captura de pantalla que muestra un ejemplo de un menú en cascada en la carpeta devices

Nota:

Dado que IExplorerCommand solo admite la activación en proceso, se recomienda su uso por Shell los orígenes de datos que necesitan compartir la implementación entre comandos y menús contextuales.

 

Obtención del comportamiento dinámico para verbos estáticos mediante la sintaxis de consulta avanzada

Advanced Query Syntax (AQS) puede expresar una condición que se evaluará mediante propiedades del elemento para el que se está instanciando la verb. Este sistema solo funciona con propiedades rápidas. Estas son propiedades que el Shell origen de datos considera como rápidas al no devolver SHCOLSTATE_SLOW desde IShellFolder2::GetDefaultColumnState.

Windows 7 y versiones posteriores admiten valores canónicos que evitan problemas en compilaciones localizadas. Se requiere la siguiente sintaxis canónica en compilaciones localizadas para aprovechar esta mejora de Windows 7.

System.StructuredQueryType.Boolean#True

En la entrada del Registro de ejemplo siguiente:

  • El valor AppliesTo controla si verb se muestra u oculta.
  • El valor DefaultAppliesTo controla cuál verb es el predeterminado.
  • El valor HasLUAShield controla si se muestra un escudo de Control de cuentas de usuario (UAC).

En este ejemplo, el valor DefaultAppliesTo hace que sea verb el valor predeterminado para cualquier archivo con la palabra "exampleText1" en su nombre de archivo. El valor AppliesTo habilita el verb para cualquier archivo que tenga "exampleText1" en el nombre. El valor hasLUAShield muestra el escudo de los archivos con "exampleText2" en el nombre.

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

Agregue la subclave Command y un valor:

HKEY_CLASSES_ROOT
   txtile
      shell
         test.verb
            Command
               (Default) = %SystemRoot%\system32\notepad.exe %1

En el Registro de Windows 7, consulte HKEY_CLASSES_ROOT\unidad como ejemplo de verbos de Bitlocker que emplean el siguiente enfoque:

  • 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.

En desuso: Asociación de verbos con comandos dinámicos de Intercambio de datos

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 detectar el servidor DDE. Un servidor DDE bloquea el mensaje de ventana de difusión y, por tanto, bloquea las conversaciones de DDE para otras aplicaciones. Es habitual que una sola aplicación bloqueada provoque bloqueos posteriores en toda la experiencia del usuario.

El método IDropTarget es más sólido y tiene una mejor compatibilidad con la activación porque usa la activación COM del controlador. En el caso de la selección de varios elementos, IDropTarget no está sujeto a las restricciones de tamaño de búfer que se encuentran en DDE y 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. Esto es más sencillo y no pierde la información del espacio de nombres tal como ocurre cuando el elemento se convierte en una ruta de acceso para los protocolos de línea de comandos o DDE.

Para obtener más información sobre IDropTarget y Shell las consultas de atributos de asociación de archivos, vea Tipos percibidos y registro de aplicaciones.

Completando tareas de Verb implementación

Las siguientes tareas para implementar verbos son relevantes para las implementaciones estáticas y dinámicas verb . Para obtener más información sobre los verbos dinámicos, vea Personalización de un menú contextual mediante verbos dinámicos.

Personalización del menú de acceso rápido para objetos predefinidos Shell

Muchos objetos predefinidos Shell 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 nombre de tipo de archivo.

Una lista de objetos predefinidos se encuentra en la sección Objetos predefinidos Shell de Crear Shell controladores de extensión. Esos objetos predefinidos Shell cuyos menús contextuales se pueden personalizar agregando verbos en el Registro se marcan en la tabla con la palabra Verb.

Extensión de un nuevo submenú

Cuando un usuario abre el menú Archivo en el Explorador de Windows, uno de los comandos mostrados es Nuevo. Al seleccionar este comando se muestra un submenú. De forma predeterminada, el submenú contiene dos comandos, Carpeta y Acceso directo, que permiten a los usuarios crear subcarpetas y accesos directos. Este submenú se puede extender para incluir comandos de creación de archivos para cualquier tipo de archivo.

Para agregar un comando de creación de archivos al submenú Nuevo , los archivos de la aplicación deben tener un tipo de archivo asociado. Incluya una subclave ShellNew en el nombre de archivo. Cuando se selecciona el comando Nuevo del menú Archivo, Shell agrega el tipo de archivo al submenú Nuevo. La cadena de presentació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 varios valores de datos a la subclave ShellNew . Los valores disponibles se enumeran en la tabla siguiente.

Valor de subclave ShellNew Descripción
Comando Ejecuta una aplicación. Este valor REG_SZ especifica la ruta de acceso de la aplicación que se va a ejecutar. Por ejemplo, puede establecerlo para iniciar un asistente.
Datos Crea un archivo que contiene los datos especificados. Este valor REG_BINARY especifica los datos del archivo. Los datos se omiten si se especifica NullFile o FileName .
NombreDeArchivo Crea un archivo que es una copia de un archivo especificado. Este valor REG_SZ especifica la ruta de acceso completa del archivo que se va a copiar.
NullFile Crea un archivo vacío. NullFile no tiene asignado ningún valor. Si se especifica NullFile , se omiten los valores del Registro Data y FileName .

 

En el siguiente ejemplo de clave del Registro y captura de pantalla se muestra el submenú Nuevo para el tipo de archivo .myp-ms. Tiene un comando, Aplicación MyProgram.

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
      MyProgram.1
         ShellNew
         NullFile

La captura de pantalla muestra el submenú Nuevo . Cuando un usuario selecciona Aplicación MyProgram en el submenú Nuevo , crea Shell un archivo denominado New MyProgram Application.myp-ms y lo pasa a MyProgram.exe.

Captura de pantalla del explorador de Windows que muestra un nuevo comando

Creación de controladores de arrastrar y colocar

El procedimiento básico para implementar un controlador de arrastrar y colocar es el mismo que para los controladores de menú contextual convencionales. Sin embargo, los controladores de menú contextual suelen usar solo el puntero IDataObject pasado al método IShellExtInit::Initialize del controlador para extraer el nombre del objeto. Un controlador de arrastrar y colocar podría implementar un controlador de datos más sofisticado para modificar el comportamiento del objeto arrastrado.

Cuando un usuario hace clic con el botón derecho en un Shell objeto para arrastrar un objeto, se muestra un menú contextual cuando el usuario intenta colocar el objeto. En la captura de pantalla siguiente se muestra un menú contextual típico de arrastrar y colocar.

captura de pantalla del menú contextual de arrastrar y colocar

Un controlador de arrastrar y colocar es un controlador de menú contextual que puede agregar elementos a este menú contextual. Los controladores de arrastrar y colocar normalmente se registran en la siguiente subclave.

HKEY_CLASSES_ROOT
   Directory
      shellex
         DragDropHandlers

Agregue una subclave bajo la subclave DragDropHandlers denominada para el controlador de arrastrar y colocar y establezca el valor predeterminado de la subclave en la forma de cadena del IDENTIFICADOR de clase del controlador (CLSID). En el ejemplo siguiente se habilita el controlador de arrastrar y colocar MyDD .

HKEY_CLASSES_ROOT
   Directory
      shellex
         DragDropHandlers
            MyDD
               (Default) = {MyDD CLSID GUID}

Suprimir verbos y controlar la visibilidad

Puedes usar la configuración de políticas de Windows para controlar la verb visibilidad. Los verbos se pueden suprimir a través de la configuración de directiva agregando un valor SuppressionPolicy o un valor GUID SuppressionPolicyEx a la subclave del registro de verb. Establezca el valor de la subclave DeletePolicy en el identificador de directiva. Si la directiva está activada, se suprimen verb y su entrada de menú contextual asociada. Para conocer los posibles valores de identificador de directiva, consulte la enumeración RESTRICTIONS.

Usar el Verb modelo de selección

Los valores del Registro deben establecerse para que los verbos controle situaciones en las que un usuario puede seleccionar un solo elemento, varios elementos o una selección de un elemento. Un verb requiere valores de registro independientes para cada una de estas tres situaciones que el verb admite. Los valores posibles para el verb modelo de selección son los siguientes:

  • Especifique el valor MultiSelectModel para todos los verbos. Si no se especifica el valor MultiSelectModel, se deduce del tipo de verb implementación que ha elegido. En el caso de los métodos basados en COM (como DropTarget y ExecuteCommand) Player se asume y para los otros métodos se asume Document .
  • Especifique Single para verbos que admitan solo una sola selección.
  • Especifique Player para verbos que admitan cualquier número de elementos.
  • Especifique Documento para verbos que creen una ventana de nivel superior para cada elemento. Al hacerlo, se limita el número de elementos activados y ayuda a evitar quedarse sin recursos del sistema si el usuario abre demasiadas ventanas.

Cuando el número de elementos seleccionados no corresponden al verb modelo de selección o es mayor que los límites predeterminados establecidos en la tabla siguiente, el verb no aparece.

Tipo de verb implementación Documento Jugador
Heredado 15 elementos 100 elementos
COM 15 elementos Sin límite

 

A continuación se muestran entradas del Registro de ejemplo con el valor MultiSelectModel.

HKEY_CLASSES_ROOT
   Folder
      shell
         open
             = MultiSelectModel = Document
HKEY_CLASSES_ROOT
   ProgID
      shell
         verb
             = MultiSelectModel = Single | Document | Player

Uso de atributos de elemento

Los valores de marca SFGAO de los Shell atributos de un elemento se pueden probar para determinar si verb se debe habilitar o deshabilitar.

Para usar esta característica de atributo, agregue los siguientes valores REG_DWORD en :verb

  • El valor AttributeMask especifica el valor SFGAO de los valores de bits de la máscara con la que se va a probar.
  • El valor AttributeValue especifica el valor SFGAO de los bits que se prueban.
  • ImplicitSelectionModel especifica cero para verbos de elemento o distinto de cero para verbos en el menú contextual de fondo.

En la entrada del Registro de ejemplo siguiente, AttributeMask se establece en SFGAO_READONLY (0x40000).

HKEY_CLASSES_ROOT
   txtfile
      Shell
         test.verb2
            AttributeMask = 0x40000
            AttributeValue = 0x0
            ImpliedSelectionModel = 0x0
            command
               (Default) = %SystemRoot%\system32\notepad.exe %1

Implementación de verbos personalizados para carpetas a través de Desktop.ini

En Windows 7 y versiones posteriores, puedes agregar verbos a una carpeta a través de Desktop.ini. Para obtener más información sobre Desktop.ini archivos, consulte Personalización de carpetas con Desktop.ini.

Nota:

Desktop.ini archivos siempre deben marcarse como System + Hidden para que no se muestren a los usuarios.

 

Para agregar verbos personalizados para carpetas a través de un archivo Desktop.ini, realice los pasos siguientes:

  1. Cree una carpeta marcada como De solo lectura o Sistema.

  2. Cree un archivo Desktop.ini que incluya un [. ShellClassInfo] DirectoryClass=Folder ProgID.

  3. En el Registro, cree HKEY_CLASSES_ROOT\Folder ProgID con un valor de CanUseForDirectory. El valor CanUseForDirectory evita el uso indebido de progIDs que están establecidos para no participar en la implementación de verbos personalizados para carpetas a través de Desktop.ini.

  4. Agregue verbos en la subclave FolderProgID, por ejemplo:

    HKEY_CLASSES_ROOT
       CustomFolderType
          Shell
             MyVerb
                command
                   (Default) = %SystemRoot%\system32\notepad.exe %1\desktop.ini
    

Nota:

Estos verbos pueden ser el valor predeterminado verb, en cuyo caso, al hacer doble clic en la carpeta, se activa el verb.

 

Procedimientos recomendados para controladores de menú contextual y selección de varios verbos

Elección de un elemento estático o dinámico Verb para el menú contextual

Personalización de un menú contextual mediante verbos dinámicos

Menús contextuales y controladores de menú contextual

Verbos y asociaciones de archivos

Referencia del menú contextual