Registro de controladores de extensiones de shell
Se debe registrar un objeto de controlador de extensión de Shell antes de que el Shell pueda usarlo. Este tema es una explicación general de cómo registrar un controlador de extensión de Shell.
Cada vez que cree o cambie un controlador de extensión de Shell, es importante notificar al sistema que ha realizado un cambio. Para ello, llame a SHChangeNotify y especifique el evento SHCNE_ASSOCCHANGED . Si no llama a SHChangeNotify, es posible que el cambio no se reconozca hasta que se reinicie el sistema.
Hay algunos factores adicionales que se aplican a los sistemas Windows 2000. Para obtener más información, consulta la sección Registrar controladores de extensiones de shell en sistemas Windows 2000 .
Al igual que con todos los objetos del Modelo de objetos componentes (COM), debe crear un GUID para el controlador mediante una herramienta como Guidgen.exe, que se proporciona con el Kit de desarrollo de software (SDK) de Windows. Cree una subclave en HKEY_CLASSES_ROOT\CLSID cuyo nombre sea la forma de cadena de ese GUID. Dado que los controladores de extensión de Shell son servidores en proceso, también debe crear una subclave InprocServer32 en esa subclave GUID con el valor (predeterminado) establecido en la ruta de acceso del archivo DLL del controlador. Use el modelo de subprocesos de apartamento. A continuación, se muestra un ejemplo:
HKEY_CLASSES_ROOT
CLSID
{00021500-0000-0000-C000-000000000046}
InprocServer32
(Default) = %windir%\System32\Example.dll
ThreadingModel = Apartment
Cada vez que el Shell realiza una acción que puede implicar un controlador de extensión de Shell, comprueba la subclave del Registro adecuada. La subclave en la que se registra un controlador de extensión controla cuándo se llamará. Por ejemplo, es una práctica habitual tener un controlador de menú contextual al que se llama cuando shell muestra un menú contextual para un miembro de un tipo de archivo. En este caso, el controlador debe estar registrado en la subclave ProgID del tipo de archivo.
En este tema se describen los temas siguientes:
- Nombres de controlador
- Objetos de Shell predefinidos
- Ejemplo de registro de controlador de extensión
- Temas relacionados
Nombres de controlador
Para habilitar un controlador de extensión de Shell, cree una subclave con el nombre de la subclave del controlador (vea a continuación) en la subclave ShellEx de ProgID (para tipos de archivo) o el nombre del tipo de objeto shell (para predefined_shell_objects).
Por ejemplo, si desea registrar un controlador de extensión de menú contextual para MyProgram.1, empiece por crear la siguiente subclave:
HKEY_CLASSES_ROOT
MyProgram.1
ShellEx
ContextMenuHandlers
Para los siguientes controladores, cree una subclave debajo de la subclave "Nombre de subclave del controlador" denominada como la versión de cadena del identificador de clase (CLSID) de la extensión shell. Se pueden registrar varias extensiones en el nombre de la subclave del controlador mediante la creación de varias subclaves.
Controlador | Interfaz | Nombre de subclave del controlador |
---|---|---|
Controlador de proveedor de columnas | IColumnProvider | ColumnHandlers |
Controlador de menú contextual | IContextMenu | ContextMenuHandlers |
Controlador de copyhook | ICopyHook | CopyHookHandlers |
Controlador de arrastrar y colocar | IContextMenu | DragDropHandlers |
Controlador de la hoja de propiedades | IShellPropSheetExt | PropertySheetHandlers |
Para los siguientes controladores, el valor predeterminado de la clave "Nombre de subclave del controlador" es la versión de cadena del CLSID de la extensión shell. Solo se puede registrar una extensión para estos controladores.
Controlador | Interfaz | Nombre de subclave del controlador |
---|---|---|
Controlador de datos | IDataObject | Datahandler |
Controlador de colocación | IDropTarget | DropHandler |
Controlador de iconos | IExtractIconA/W | IconHandler |
Controlador de imágenes en miniatura | IThumbnailProvider | {E357FCCD-A995-4576-B01F-234630154E96} |
Controlador de recuadro informativo | IQueryInfo | {00021500-0000-0000-C000-000000000046} |
Vínculo de Shell (ANSI) | IShellLinkA | {000214EE-0000-0000-C000-000000000046} |
Vínculo de Shell (UNICODE) | IShellLinkW | {000214F9-0000-0000-C000-000000000046} |
Almacenamiento estructurado | IStorage | {0000000B-0000-0000-C000-0000000000046} |
Metadatos | IPropertySetStorage | PropertyHandler |
Anclar al menú Inicio | IStartMenuPinnedList | {a2a9545d-a0c2-42b4-9708-a0b2badd77c8} |
Anclar a la barra de tareas | {90AA3A4E-1CBA-4233-B8BB-535773D48449} |
Las subclaves especificadas para agregar Anclar al menú Inicio y Anclar a la barra de tareas al menú contextual de un elemento solo son necesarias para los tipos de archivo que incluyen la entrada IsShortCut .
Objetos de Shell predefinidos
El Shell define objetos adicionales en HKEY_CLASSES_ROOT que se pueden extender de la misma manera que los tipos de archivo. Por ejemplo, para agregar un controlador de hoja de propiedades para todos los archivos, puede registrarse en la subclave PropertySheetHandlers .
HKEY_CLASSES_ROOT
*
shellex
PropertySheetHandlers
En la tabla siguiente se proporcionan las distintas subclaves de HKEY_CLASSES_ROOT en las que se pueden registrar controladores de extensión. Tenga en cuenta que muchos controladores de extensión no se pueden registrar en todas las subclaves enumeradas. Para obtener más información, consulte la documentación del controlador específico.
Subclave | Descripción | Posibles controladores |
---|---|---|
* | Todos los archivos | Menú contextual, Hoja de propiedades, Verbos (ver a continuación) |
AllFileSystemObjects | Todos los archivos y carpetas de archivos | Menú contextual, hoja de propiedades, verbos |
Carpeta | Todas las carpetas | Menú contextual, hoja de propiedades, verbos |
Directorio | Carpetas de archivos | Menú contextual, hoja de propiedades, verbos |
Directory\Background | Fondo de la carpeta de archivos | Solo menú contextual |
DesktopBackground | Fondo de escritorio (Windows 7 y versiones posteriores) | Menú contextual, Verbos |
Conducir | Todas las unidades de MyComputer, como "C:\" | Menú contextual, hoja de propiedades, verbos |
Network | Toda la red (en Mis lugares de red) | Menú contextual, hoja de propiedades, verbos |
Network\Type\ # | Todos los objetos de tipo # (consulte a continuación) | Menú contextual, hoja de propiedades, verbos |
NetShare | Todos los recursos compartidos de red | Menú contextual, hoja de propiedades, verbos |
Netserver | Todos los servidores de red | Menú contextual, hoja de propiedades, verbos |
network_provider_name | Todos los objetos proporcionados por el proveedor de red "network_provider_name" | Menú contextual, hoja de propiedades, verbos |
Impresoras | Todas las impresoras | Menú contextual, hoja de propiedades |
AudioCD | Cd de audio en la unidad de CD | Solo verbos |
DVD | Unidad de DVD (Windows 2000) | Menú contextual, hoja de propiedades, verbos |
Notas
- Para acceder al menú contextual de fondo de la carpeta de archivos, haga clic con el botón derecho en una carpeta de archivos, pero no sobre ninguno de los contenidos de la carpeta.
- "Verbos" son comandos especiales registrados en HKEY_CLASSES_ROOT\Verbo delshell\de subclave\.
- EnTipo\#de red\, "#" es un código de tipo de proveedor de red en decimal. El código de tipo de proveedor de red es la palabra alta de un tipo de red. La lista de tipos de red se da en el archivo de encabezado Winnetwk.h (valores WNNC_NET_*). Por ejemplo, WNNC_NET_SHIVA es 0x00330000, por lo que la subclave de tipo correspondiente sería HKEY_CLASSES_ROOT\Tipo\ dered\51.
- "network_provider_name" es un nombre de proveedor de red especificado por WNetGetProviderName, con los espacios convertidos en caracteres de subrayado. Por ejemplo, si el proveedor de red de redes de Microsoft está instalado, su nombre de proveedor es "Microsoft Windows Network" y el network_provider_name correspondiente es Microsoft_Windows_Network.
Ejemplo de registro de controlador de extensión
Para habilitar un controlador determinado, cree una subclave en la subclave de tipo de controlador de extensión con el nombre del controlador. Shell no usa el nombre del controlador, pero debe ser diferente de todos los demás nombres de esa subclave de tipo. Establezca el valor predeterminado de la subclave name en el formato de cadena del GUID del controlador.
En el ejemplo siguiente se muestran las entradas del Registro que habilitan los controladores de extensión de hoja de propiedades y menú contextual, mediante un tipo de archivo .myp de ejemplo.
HKEY_CLASSES_ROOT
.myp
(Default) = MyProgram.1
CLSID
{00000000-1111-2222-3333-444444444444}
InProcServer32
(Default) = C:\MyDir\MyCommand.dll
ThreadingModel = Apartment
{11111111-2222-3333-4444-555555555555}
InProcServer32
(Default) = C:\MyDir\MyPropSheet.dll
ThreadingModel = Apartment
MyProgram.1
(Default) = MyProgram Application
Shellex
ContextMenuHandler
MyCommand
(Default) = {00000000-1111-2222-3333-444444444444}
PropertySheetHandlers
MyPropSheet
(Default) = {11111111-2222-3333-4444-555555555555}
Temas relacionados