Procedimientos recomendados para controladores de menú contextual y varios verbos

Este tema se organiza de la siguiente manera:

Prácticas recomendadas

Los verbos estáticos son verbos más sencillos para implementar y proporcionan una funcionalidad enriquecida. Le recomendamos encarecidamente que implemente un verbo mediante uno de los métodos de verbo estáticos.

Procedimientos recomendados para implementaciones de verbos

La lista siguiente representa los procedimientos recomendados para las implementaciones de verbos:

  • Elija siempre el método de verbo más sencillo que satisfaga sus necesidades.
  • Use un método de verbo estático, si es posible.
  • No realice operaciones de uso intensivo de recursos ni E/S en el subproceso de la interfaz de usuario. Tanto IShellExtInit::Initialize como IContextMenu::QueryContextMenu deben ser muy conservadores en el trabajo que realizan. IContextMenu::InvokeCommand debe realizarse en otro proceso o debe crear un subproceso para evitar el bloqueo del autor de la llamada.
  • Los verbos de prefijo con el nombre del proveedor de software independiente (ISV) como se indica a continuación, ISVName.verb. El uso de nombres no calificados puede dar lugar a colisiones con varios ISV que eligieron el mismo nombre de verbo.
  • Use siempre un ProgID específico de la aplicación. Dado que algunos tipos de elementos no usan esta asignación, hay una necesidad de nombres únicos del proveedor.
  • Coloque la interfaz de usuario con respecto al método de invocación, pero no se ejecute en un subproceso de invocador.
  • No acepte el valor devuelto S_OK para verbos canónicos pasados al método IContextMenu::InvokeCommand . Al hacerlo, se producirá un error en la implementación real del verbo y se devuelve un código de error para verbos canónicos. Si no admite verbos canónicos, devuelve un error cuando se encuentra un valor HIWORD(lpVerb) distinto de cero.
  • Evite el uso de rundll32.exe como host para el verbo.
  • Al implementar IContextMenu::QueryContextMenu , asegúrese de devolver el número de verbos que se han agregado al menú a través del valor HRESULT mediante la macro ResultFromShort.
  • Si se registra en una de las siguientes entradas de clave del Registro, tenga cuidado y asegúrese de registrar el controlador en el tipo más específico para reducir las consecuencias posiblemente no deseadas:
    • HKEY_CLASSES_ROOT\*
    • HKEY_CLASSES_ROOT\AllFileSystemObjects
    • HKEY_CLASSES_ROOT\Folder
    • HKEY_CLASSES_ROOT\Directory
  • Establezca la tecla MayChangeDefaultMenu solo si prevé que es posible que tenga que cambiar el verbo predeterminado en el menú contextual. Si el controlador no cambia el verbo predeterminado, no debe establecer esta clave porque, al hacerlo, el sistema carga el archivo DLL innecesariamente.
  • Minimice el trabajo que realiza en IShellExtInit::Initialize. Para los controladores de menú contextual, capture el objeto de datos pasado a IShellExtInit::Initialize y, a continuación, procesándolo en IContextMenu::QueryContextMenu o IContextMenu::InvokeCommand.

Procedimientos recomendados para varios verbos de selección

Dado que el número de elementos de un escenario de verbo de selección múltiple puede ser grande, es importante tener en cuenta las implicaciones de rendimiento de las implementaciones de verbo. Por ejemplo, cuando un usuario busca "*" en un ámbito que incluye un gran número de elementos y, a continuación, hace clic en Seleccionar todo y hace clic con el botón derecho, el verbo se presenta con una selección que puede tener miles de elementos en él. Como resultado, los verbos solo deben tener en cuenta el primer elemento de la selección y el recuento general de elementos. El primer elemento se define como el elemento de la parte superior de la vista o el elemento en el que el usuario hace clic con el botón derecho por primera vez.

En Windows 7 y versiones posteriores, el número de elementos pasados a un verbo se limita a 16 cuando se consulta un menú contextual. A continuación, el verbo se vuelve a crear y se vuelve a inicializar con la selección completa cuando se invoca ese verbo.

En algunos casos, es adecuado tener en cuenta un pequeño número de elementos fijos. Por ejemplo, es adecuado que un verbo "diff" tenga en cuenta solo los dos primeros elementos. Por lo general, no es necesario probar todos los elementos de la selección para ver si es un tipo determinado o consultar todos los elementos de la selección para sus propiedades. Mire más bien en el primer elemento y decida si es adecuado agregar el verbo.

Selecciones heterogéneos

Los verbos optimistas se agregan automáticamente en el caso de selección múltiple, suponiendo que el verbo pueda controlar los elementos no especificados. Por el contrario, los verbos pesimistas no se agregan cuando la selección contiene elementos no especificados y solo se agregan en casos en los que el número de elementos es pequeño.

Los verbos de estilo del reproductor deben ser optimistas y omitir silenciosamente los elementos que no se controlan. Si un error al actuar en los elementos puede causar pérdida de datos o confusión, el verbo debe advertir a los usuarios sobre los elementos que no se pueden procesar. Por ejemplo, un verbo "backup" debe indicar que no se pudo realizar una copia de seguridad de algunos elementos.

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

Creación de controladores de menús contextuales

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

Menús contextuales (contextuales) y controladores de menú contextual

Verbos y asociaciones de archivos

Referencia del menú contextual