Windows Shell extensions are COM objects that can be used to extend the desktop shell (explorer.exe) to provide extra functionality. These extensions are mainly used for custom file types.
The first step is to download the source code. The recommendation is to download the latest code snapshot. This source code contains different Visual Studio solution files. Depending on the version of Visual Studio you are using open the correct one. For example
for Visual Studio 2012 open msf_vc110.sln (110 is the internal C\C++ compiler numbering of Visual Studio 2012).
This solution contains the following 4 projects:
- msf: collection of templates that make up the Mini Shell Extension Framework)
- vvvsample: sample of several shell extensions
- bhosample: sample of a Browser Helper extension
- start: empty project that can be used as starting point for your own shell extension
After building the solution the best way to get started is to debug the vvvsample and watch it interact with the shell. Use an explorer window to open the provided .vvv file. Instructions how to debug shell extensions can be found at:
MSF is overloaded with ATL trace messages that will output to the default debug console. MSF commes with a .reg file that can be used to add names of shell COM interfaces to the registry, This will improve the debug process. This .reg file can be imported into
the registry using the regedit tool.
The build process will not register the shell extensions. Before starting the debug process the extension needs to be registered with regsvr32.exe. Depending on the OS (x64 or x86) the correct sample.dll needs to be registered. Registering a shell extensions
requires administrative privileges.
Note: If you want to develop an extension for an x64 OS it is also required to ship an x86 (32 bit) version of your shell extension. 32 bit applications that will use the open/save common file dialogbox require the 32 bit version to be able to use the extension
from a 32 bit application.
Building specific extensions
Building an InfoTip extension
Building a ContextMenu extension
Building a ShellFolder extension