Sunteți pe pagina 1din 16

2/11/2019 Creación de controladores de extensión de Shell - Aplicaciones Win32 | Documentos de Microsoft

Crear controladores de extensión


de Shell
30/05/2018 • 15 minutos para leer •
In this article
Implementing Shell Extension Handlers
Enhancing Windows Search with Shell Extension Handlers
Registering Shell Extension Handlers
Related topics

Las capacidades del Shell se pueden ampliar con entradas de registro y archivos .ini. Si bien
este enfoque para extender el Shell es simple y adecuado para muchos propósitos, es
limitado. Por ejemplo, si usa el registro para especificar un icono personalizado para un tipo
de archivo, aparecerá el mismo icono para cada archivo de ese tipo. Extender el Shell con el
registro no le permite variar el ícono para diferentes archivos del mismo tipo. Otros aspectos
del Shell, como la hoja de propiedades Propiedades que se puede mostrar cuando se hace
clic con el botón derecho en un archivo, no se pueden modificar en absoluto con el registro.

Un enfoque más potente y flexible para extender Shell es implementar controladores de


extensión de shell . Estos manejadores pueden implementarse para una variedad de acciones
que el Shell puede realizar. Antes de realizar la acción, el Shell consulta el controlador de
extensión, dándole la oportunidad de modificar la acción. Un ejemplo común es un
controlador de extensión de menú contextual. Si se implementa uno para un tipo de archivo,
se consultará cada vez que se haga clic con el botón derecho en uno de los archivos. El
controlador puede entonces especificar elementos de menú adicionales archivo por archivo,
en lugar de tener el mismo conjunto para todo el tipo de archivo.

Este documento discute cómo implementar los controladores de extensión que le permiten
modificar una variedad de acciones de Shell. Los siguientes manejadores están asociados con
un tipo de archivo en particular y le permiten especificar archivo por archivo:

Manipulador Descripción

Controlador Se llama antes de que se muestre el menú contextual de un archivo. Le permite


de menú de agregar elementos al menú contextual archivo por archivo.
acceso directo

https://docs.microsoft.com/en-us/windows/win32/shell/handlers 1/16
2/11/2019 Creación de controladores de extensión de Shell - Aplicaciones Win32 | Documentos de Microsoft

Manipulador Descripción

Manejador de Se invoca cuando se realiza una operación de arrastrar y soltar en objetos


datos dragShell. Le permite proporcionar formatos de portapapeles adicionales al
destino de colocación.

Controlador Se invoca cuando un objeto de datos se arrastra o suelta en un archivo. Le


de caída permite convertir un archivo en un destino de colocación.

Controlador Se llama antes de que se muestre el icono de un archivo. Le permite reemplazar


de iconos el icono predeterminado del archivo con un icono personalizado archivo por
archivo.

Manejador de Se llama antes de que se muestre la hoja de propiedades de Propiedades de


hoja de un objeto . Le permite agregar o reemplazar páginas.
propiedades

Manejador Proporciona una imagen para representar el artículo.


de imágenes
en miniatura

Controlador Proporciona texto emergente cuando el usuario pasa el puntero del mouse
de infotip sobre el objeto.

Controlador Proporciona acceso de lectura y escritura a metadatos (propiedades)


de almacenados en un archivo. Esto se puede usar para ampliar la vista de Detalles,
metadatos infotips, la página de propiedades y las características de agrupación.

Otros controladores no están asociados con un tipo de archivo en particular, pero se llaman
antes de algunas operaciones de Shell:

Manipulador Descripción

Controlador de Llamado por el Explorador de Windows antes de que muestre la vista Detalles
columna de una carpeta. Le permite agregar columnas personalizadas a la vista
Detalles.

Copiar Se llama cuando una carpeta u objeto de impresora está a punto de moverse,
manejador de copiarse, eliminarse o renombrarse. Le permite aprobar o vetar la operación.
gancho

https://docs.microsoft.com/en-us/windows/win32/shell/handlers 2/16
2/11/2019 Creación de controladores de extensión de Shell - Aplicaciones Win32 | Documentos de Microsoft

Manipulador Descripción

Controlador de Se invoca cuando se arrastra un archivo con el botón derecho del mouse. Le
arrastrar y soltar permite modificar el menú contextual que se muestra.

Controlador de Se llama antes de que se muestre el icono de un archivo. Le permite


superposición de especificar una superposición para el icono del archivo.
iconos

Controlador de Llamado a lanzar un motor de búsqueda. Le permite implementar un motor


búsqueda de búsqueda personalizado accesible desde el menú Inicio o el Explorador de
Windows.

Los detalles sobre cómo implementar controladores de extensión específicos se tratan en las
secciones enumeradas anteriormente. El resto de este documento cubre algunos problemas
de implementación que son comunes a todos los controladores de extensión de Shell.

Implementación de controladores de extensión de Shell


Implementando IPersistFile
Implementando IShellExtInit
Personalización de Infotip
Mejora de la búsqueda de Windows con controladores de extensión de Shell
Registro de controladores de extensión de Shell
Nombres de manejador
Objetos de Shell predefinidos
Ejemplo de registro de controlador de extensión
Temas relacionados

Implementación de controladores de extensión de


Shell
Gran parte de la implementación de un objeto controlador de extensión de Shell depende de
su tipo. Hay, sin embargo, algunos elementos comunes. En esta sección se analizan aquellos
aspectos de la implementación que comparten todos los controladores de extensión de Shell.

Todos los controladores de extensión de Shell son objetos del Modelo de objetos
componentes (COM) en proceso. Se les debe asignar un GUID y registrarse como se describe

https://docs.microsoft.com/en-us/windows/win32/shell/handlers 3/16
2/11/2019 Creación de controladores de extensión de Shell - Aplicaciones Win32 | Documentos de Microsoft

en Registro de controladores de extensión de Shell. Se implementan como archivos DLL y


deben exportar las siguientes funciones estándar:

DllMain . El punto de entrada estándar a la DLL.


DllGetClassObject . Expone la fábrica de clases del objeto.
DllCanUnloadNow . COM llama a esta función para determinar si el objeto está
sirviendo a algún cliente. De lo contrario, el sistema puede descargar la DLL y liberar la
memoria asociada.

Como todos los objetos COM, los controladores de extensión de Shell deben implementar
una interfaz IUnknown y una fábrica de clases . La mayoría de los controladores de
extensión también deben implementar una interfaz IPersistFile o IShellExtInit en Windows
XP o versiones anteriores. Estos fueron reemplazados por IInitializeWithStream ,
IInitializeWithItem e IInitializeWithFile en Windows Vista. Shell utiliza estas interfaces
para inicializar el controlador.

La interfaz IPersistFile debe implementarse de la siguiente manera:

Manejadores de datos
Manipuladores de caída

En el pasado, también se requerían controladores de iconos para implementar IPersistFile ,


pero esto ya no es cierto. Para los manejadores de iconos, IPersistFile ahora es opcional y se
prefieren otras interfaces como IInitializeWithItem .

La interfaz IShellExtInit debe implementarse de la siguiente manera:

Controladores de menú de acceso directo


Controladores de arrastrar y soltar
Manejadores de hoja de propiedades

Implementando IPersistFile

La interfaz IPersistFile está diseñada para permitir que un objeto se cargue o se guarde en
un archivo de disco. Tiene seis métodos además de IUnknown , cinco propios, y el método
GetClassID que hereda de IPersist . Con las extensiones de Shell, IPersist se usa solo para
inicializar un objeto de controlador de extensión de Shell. Como normalmente no hay
necesidad de leer o escribir en el disco, solo los métodos GetClassID y Load requieren una
implementación no simbólica.

Shell llama primero a GetClassID , y la función devuelve el identificador de clase (CLSID) del
objeto controlador de extensión. Luego, Shell llama a Load y pasa dos valores. El primero,
https://docs.microsoft.com/en-us/windows/win32/shell/handlers 4/16
2/11/2019 Creación de controladores de extensión de Shell - Aplicaciones Win32 | Documentos de Microsoft

pszFileName , es una cadena Unicode con el nombre del archivo o carpeta en el que Shell
está a punto de operar. El segundo es dwMode , que indica el modo de acceso a archivos.
Debido a que generalmente no hay necesidad de acceder a los archivos, dwMode
generalmente es cero. El método almacena estos valores según sea necesario para una
referencia posterior.

El siguiente fragmento de código ilustra cómo un controlador de extensión de Shell típico


implementa los métodos GetClassID y Load . Está diseñado para manejar ANSI o Unicode.
CLSID_SampleExtHandler es el GUID del objeto del controlador de extensión, y
CSampleExtHandler es el nombre de la clase utilizada para implementar la interfaz. Las
variables m_szFileName y m_dwMode son variables privadas que se utilizan para
almacenar el nombre del archivo y las marcas de acceso.

C ++ = Copiar

TCHAR m_szFileName[MAX_PATH]; // The file name


DWORD m_dwMode; // The file access mode

CSampleExtHandler::GetClassID(CLSID *pCLSID)
{
*pCLSID = CLSID_SampleExtHandler;
}

CSampleExtHandler::Load(PCWSTR pszFile, DWORD dwMode)


{
m_dwMode = dwMode;
return StringCchCopy(_szFileName, ARRAYSIZE(m_szFileName), pszFile);
}

Implementando IShellExtInit

The IShellExtInit interface has only one method, IShellExtInit::Initialize, in addition to


IUnknown. The method has three parameters that the Shell can use to pass in various types
of information. The values passed in depend on the type of handler, and some can be set to
NULL.

pIDFolder holds a folder's pointer to an item identifier list (PIDL). For property sheet
extensions, it is NULL. For shortcut menu extensions, it is the PIDL of the folder that
contains the item whose shortcut menu is being displayed. For nondefault drag-and-
drop handlers, it is the PIDL of the target folder.
pDataObject holds a pointer to a data object's IDataObject interface. The data object
holds one or more file names in CF_HDROP format.

https://docs.microsoft.com/en-us/windows/win32/shell/handlers 5/16
2/11/2019 Creación de controladores de extensión de Shell - Aplicaciones Win32 | Documentos de Microsoft

hRegKey holds a registry key for the file object or folder type.

The IShellExtInit::Initialize method stores the file name, IDataObject pointer, and registry
key as needed for later use. The following code fragment illustrates an implementation of
IShellExtInit::Initialize. For simplicity, this example assumes that the data object contains
only a single file. In general, it might contain multiple files that will each need to be extracted.

C ++ = Copiar

LPCITEMIDLIST m_pIDFolder; //The folder's PIDL


TCHAR m_szFile[MAX_PATH]; //The file name
IDataObject *m_pDataObj; //The IDataObject pointer
HKEY m_hRegKey; //The file or folder's registry key

STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder,


IDataObject *pDataObj,
HKEY hRegKey)
{
// If Initialize has already been called, release the old PIDL
ILFree(m_pIDFolder);
m_pIDFolder = NULL;

//Store the new PIDL.


if(pIDFolder)
{
m_pIDFolder = ILClone(pIDFolder);
}

// If Initialize has already been called, release the old


// IDataObject pointer.
if (m_pDataObj)
{
m_pDataObj->Release();
}

// If a data object pointer was passed in, save it and


// extract the file name.
if (pDataObj)
{
m_pDataObj = pDataObj;
pDataObj->AddRef();

STGMEDIUM medium;
FORMATETC fe = {CF_HDROP, NULL, DVASPECT_CONTENT, -1,
TYMED_HGLOBAL};
UINT uCount;

if(SUCCEEDED(m_pDataObj->GetData(&fe, &medium)))
{

https://docs.microsoft.com/en-us/windows/win32/shell/handlers 6/16
2/11/2019 Creación de controladores de extensión de Shell - Aplicaciones Win32 | Documentos de Microsoft

// Get the count of files dropped.


uCount = DragQueryFile((HDROP)medium.hGlobal, (UINT)-1, NULL,
0);

// Get the first file name from the CF_HDROP.


if(uCount)
DragQueryFile((HDROP)medium.hGlobal, 0, m_szFile,
sizeof(m_szFile)/sizeof(TCHAR));

ReleaseStgMedium(&medium);
}
}

// Duplicate the registry handle.


if (hRegKey)
RegOpenKeyEx(hRegKey,
NULL,
0L,
MAXIMUM_ALLOWED,
&m_hRegKey);
return S_OK;
}

CSampleExtHandler is the name of the class used to implement the interface. The
m_pIDFolder, m_pDataObject, m_szFileName, and m_hRegKey variables are private
variables used to store the information that is passed in. For simplicity, this example assumes
that only one file name will be held by the data object. After the FORMATETC structure is
retrieved from the data object, DragQueryFile is used to extract the file name from the
FORMATETC structure's medium.hGlobal member. If a registry key is passed in, the
method uses RegOpenKeyEx to open the key and assigns the handle to m_hRegKey.

Infotip Customization

There are two ways to customize infotips:

Implement an object that supports IQueryInfo and then register that object under the
proper subkey in the registry (see Registering Shell Extension Handlers below).
Specify a fixed string or a list of specific file properties to be displayed.

To display a fixed string for a namespace extension, create an entry called InfoTip in the
{CLSID} key of your namespace extension. Set the value of that entry to be either the literal
string you want to display, as shown in this example, or an indirect string that specifies a
resource and index within that resource (for localization purposes).

= Copiar

https://docs.microsoft.com/en-us/windows/win32/shell/handlers 7/16
2/11/2019 Creación de controladores de extensión de Shell - Aplicaciones Win32 | Documentos de Microsoft

HKEY_CLASSES_ROOT
CLSID
{CLSID}
InfoTip = InfoTip string for your namespace extension

To display a fixed string for a file type, create an entry called InfoTip in the ProgID key of
that file type. Set the value of that entry to be either the literal string you want to display or
an indirect string that specifies a resource and index within that resource (for localization
purposes), as shown in this example.

= Copiar

HKEY_CLASSES_ROOT
ProgID
InfoTip = Resource.dll, 3

If you want the Shell to display specific file properties in the infotip for a specific file type,
create an entry called InfoTip in the ProgID key for that file type. Set the value of that entry
to be a semicolon-delineated list of canonical property names, format identifier
(FMTID)/property identifier (PID) pairs, or both. This value must begin with "prop:" to identify
it as a property list string. If you omit "prop:", the value is seen as a literal string and
displayed as such.

In the following example, propname is a canonical property name (such as System.Date) and
{fmtid},pid is an FMTID/PID pair.

= Copiar

HKEY_CLASSES_ROOT
ProgID
InfoTip = prop:propname;propname;{fmtid},pid;{fmtid},pid

The following property names can be used:

Property Name Description Retrieved From

Author Author of the document PIDSI_AUTHOR

Title Title of the document PIDSI_TITLE

Subject Subject summary PIDSI_SUBJECT

https://docs.microsoft.com/en-us/windows/win32/shell/handlers 8/16
2/11/2019 Creación de controladores de extensión de Shell - Aplicaciones Win32 | Documentos de Microsoft

Property Name Description Retrieved From

Comment Document comments PIDSI_COMMENT or folder/driver properties

PageCount Number of pages PIDSI_PAGECOUNT

Name Friendly name Standard folder view

OriginalLocation Location of original file Briefcase folder and Recycle Bin folder

DateDeleted Date file was deleted Recycle Bin folder

Type Type of file Standard folder details view

Size Size of file Standard folder details view

SyncCopyIn Same as OriginalLocation Same as OriginalLocation

Modified Date last modified Standard folder details view

Created Date created Standard folder details view

Accessed Date last accessed Standard folder details view

InFolder Directory containing the file Document search results

Rank Quality of search match Document search results

FreeSpace Available storage space Disk drives

NumberOfVisits Number of visits Favorites folder

Attributes File Attributes Standard folder details view

Company Company name PIDDSI_COMPANY

Category Document category PIDDSI_CATEGORY

Copyright Media copyright PIDMSI_COPYRIGHT

HTMLInfoTipFile HTML InfoTip file Desktop.ini file for folder

https://docs.microsoft.com/en-us/windows/win32/shell/handlers 9/16
2/11/2019 Creación de controladores de extensión de Shell - Aplicaciones Win32 | Documentos de Microsoft

Enhancing Windows Search with Shell Extension


Handlers
Shell extension handlers may be used to enhance the user experience provided by a
Windows Search protocol handler. To enable such enhancements, the supporting Shell
extension handler must be designed to integrate with the search protocol handler as a data
source. For information about how to enhance a Windows Search protocol handler through
integration with a Shell extension handler, see Adding Icons, Previews and Shortcut Menus.
For more information about Windows Search protocol handlers, see Developing Protocol
Handlers.

Registering Shell Extension Handlers


A Shell extension handler object must be registered before the Shell can use it. This section is
a general discussion of how to register a Shell extension handler.

Any time you create or change a Shell extension handler, it is important to notify the system
that you have made a change with SHChangeNotify, specifying the
SHCNE_ASSOCCHANGED event. If you do not call SHChangeNotify, the change might not
be recognized until the system is rebooted.

As with all COM objects, you must create a GUID for the handler using a tool such as
UUIDGEN.exe. Create a key under HKEY_CLASSES_ROOT\CLSID whose name is the string
form of the GUID. Because Shell extension handlers are in-process servers, you must create
an InProcServer32 key under the GUID key with the default value set to the path of the
handler's DLL. Use the Apartment threading model.

Any time the Shell takes an action that can involve a Shell extension handler, it checks the
appropriate registry key. The key under which an extension handler is registered thus
controls when it will be called. For instance, it is a common practice to have a shortcut menu
handler called when the Shell displays a shortcut menu for a member of a file type. In this
case, the handler must be registered under the file type's ProgID key.

Handler Names

To enable a Shell extension handler, create a subkey with the handler subkey name (see
below) under the ShellEx subkey of either the ProgID (for file types) or the Shell object type
https://docs.microsoft.com/en-us/windows/win32/shell/handlers 10/16
2/11/2019 Creación de controladores de extensión de Shell - Aplicaciones Win32 | Documentos de Microsoft

name (for Predefined Shell Objects).

For example, if you wanted to register a shortcut menu extension handler for MyProgram.1,
you would begin by creating the following subkey:

= Copiar

HKEY_CLASSES_ROOT
MyProgram.1
ShellEx
ContextMenuHandlers

For the following handlers, create a subkey underneath the "Handler Subkey name" key
whose name is the string version of the CLSID of the Shell extension. Multiple extensions can
be registered under the handler subkey name key by creating multiple subkeys.

Handler Interface Handler Subkey Name

Shortcut menu handler IContextMenu ContextMenuHandlers

Copyhook handler ICopyHook CopyHookHandlers

Drag-and-drop handler IContextMenu DragDropHandlers

Property sheet handler IShellPropSheetExt PropertySheetHandlers

Column provider handler (deprecated in IColumnProvider ColumnHandlers


Windows Vista)

For the following handlers, the default value of the "Handler Subkey Name" key is the string
version of the CLSID of the Shell extension. Only one extension can be registered for these
handlers.

Handler Interface Handler Subkey Name

Data handler IDataObject DataHandler

Drop handler IDropTarget DropHandler

Icon handler IExtractIconA/W IconHandler

https://docs.microsoft.com/en-us/windows/win32/shell/handlers 11/16
2/11/2019 Creación de controladores de extensión de Shell - Aplicaciones Win32 | Documentos de Microsoft

Handler Interface Handler Subkey Name

Image handler IExtractImage {BB2E617C-0920-11d1-9A0B-


00C04FC2D6C1}

Thumbnail image IThumbnailProvider {E357FCCD-A995-4576-B01F-


handler 234630154E96}

Infotip handler IQueryInfo {00021500-0000-0000-C000-


000000000046}

Shell link (ANSI ) IShellLinkA {000214EE-0000-0000-C000-


000000000046}

Shell link IShellLinkW {000214F9-0000-0000-C000-


(UNICODE) 000000000046}

Structured IStorage {0000000B-0000-0000-C000-


storage 000000000046}

Metadata IPropertyStore PropertyHandler

Metadata IPropertySetStorage (deprecated in PropertyHandler


Windows Vista)

Pin to Start IStartMenuPinnedList {a2a9545d-a0c2-42b4-9708-


Menu a0b2badd77c8}

Pin to Taskbar {90AA3A4E-1CBA-4233-B8BB-


535773D48449}

The subkeys specified to add Pin to Start Menu and Pin to Taskbar to an item's shortcut
menu are only required for file types that include the IsShortCut entry.

Support for column provider handlers was removed in Windows Vista. Also, as of


Windows Vista, IPropertySetStorage has been deprecated in favor of IPropertyStore.

While IExtractImage remains supported, IThumbnailProvider is preferred for


Windows Vista and later.

https://docs.microsoft.com/en-us/windows/win32/shell/handlers 12/16
2/11/2019 Creación de controladores de extensión de Shell - Aplicaciones Win32 | Documentos de Microsoft

Predefined Shell Objects

The Shell defines additional objects under HKEY_CLASSES_ROOT which can be extended in
the same way as file types. For example, to add a property sheet handler for all files, you can
register under the PropertySheetHandlers key.

= Copiar

HKEY_CLASSES_ROOT
*
shellex
PropertySheetHandlers

The following table gives the various subkeys of HKEY_CLASSES_ROOT under which
extension handlers can be registered. Note that many extension handlers cannot be
registered under all of the listed subkeys. For further details, see the specific handler's
documentation.

Subkey Description Possible Handlers Version

* All files Shortcut Menu, All


Property Sheet,
Verbs (see below)

AllFileSystemObjects All files and file folders Shortcut Menu, 4.71


Property Sheet,
Verbs

Folder All folders Shortcut Menu, All


Property Sheet,
Verbs

Directory File folders Shortcut Menu, All


Property Sheet,
Verbs

Directory\Background File folder background Shortcut Menu only 4.71

Drive All drives in MyComputer, such Shortcut Menu, All


as "C:\" Property Sheet,
Verbs

https://docs.microsoft.com/en-us/windows/win32/shell/handlers 13/16
2/11/2019 Creación de controladores de extensión de Shell - Aplicaciones Win32 | Documentos de Microsoft

Subkey Description Possible Handlers Version

Network Entire network (under My Shortcut Menu, All


Network Places) Property Sheet,
Verbs

Network\Type\# All objects of type # (see Shortcut menu, 4.71


below) Property Sheet,
Verbs

NetShare All network shares Shortcut menu, 4.71


Property Sheet,
Verbs

NetServer All network servers Shortcut menu, 4.71


Property Sheet,
Verbs

network_provider_name All objects provided by Shortcut menu, All


network provider Property Sheet,
"network_provider_name" Verbs

Printers All printers Shortcut Menu, All


Property Sheet

AudioCD Audio CD in CD drive Verbs only All

DVD DVD drive (Windows 2000) Shortcut Menu, 4.71


Property Sheet,
Verbs

Notes:

The file folder background shortcut menu is accessed by right-clicking within a file
folder, but not over any of the folder's contents.
"Verbs" are special commands registered under
HKEY_CLASSES_ROOT\Subkey\Shell\Verb .
For Network\Type\# , "#" is a network provider type code in decimal. The network
provider type code is the high word of a network type. The list of network types is given
in the Winnetwk.h header file (WNNC_NET_* values). For example, WNNC_NET_SHIVA

https://docs.microsoft.com/en-us/windows/win32/shell/handlers 14/16
2/11/2019 Creación de controladores de extensión de Shell - Aplicaciones Win32 | Documentos de Microsoft

is 0x00330000, so the corresponding type key would be


HKEY_CLASSES_ROOT\Network\Type\51 .
"network_provider_name" is a network provider name as specified by
WNetGetProviderName, with the spaces converted into underscores. For example, if
the Microsoft Networking network provider is installed, its provider name is "Microsoft
Windows Network", and the corresponding network_provider_name is
Microsoft_Windows_Network.

Example of an Extension Handler Registration

To enable a particular handler, create a subkey under the extension handler type key with the
name of the handler. The Shell does not use the handler's name, but it must be different from
all other names under that type subkey. Set the default value of the name subkey to the
string form of the handler's GUID.

El siguiente ejemplo ilustra las entradas de registro que habilitan el menú contextual y los
controladores de extensión de hoja de propiedades, utilizando un tipo de archivo de ejemplo
.myp:

= Copiar

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}

https://docs.microsoft.com/en-us/windows/win32/shell/handlers 15/16
2/11/2019 Creación de controladores de extensión de Shell - Aplicaciones Win32 | Documentos de Microsoft

El procedimiento de registro discutido en esta sección debe seguirse para todos los sistemas
Windows.

Temas relacionados
Orientación para implementar extensiones en proceso

Is this page helpful?

 Yes  No

https://docs.microsoft.com/en-us/windows/win32/shell/handlers 16/16

S-ar putea să vă placă și