Screenshots
The Control Panel containing three managed items:
An application which displays installed managed items:
A sample application executed with a custom command string:
Introduction
I have always wanted to create DLL-based Control Panel items using only C#. Of course, I couldn't accomplish that because the Visual C# compiler cannot export methods in the same way unmanaged compilers (Delphi, Visual C++) can. Some time ago, I found an article: How To Automate Exporting .NET Function to Unmanaged Programs, which made it possible.
One can say that a Control Panel item can be created as an ordinary EXE-file. That is true. But each EXE-based item has to be separately registered in the Windows registry. When an item is created (as a DLL file) using the classes I have developed, it only has to be copied to the particular folder (where a CplNet.dll file was registered).
Using the Code
The classes I have created simplify creation of Control Panel items. To create a managed Control Panel item, one must create a class which implements an IControlPanelItem
interface.
public interface IControlPanelItem : IDisposable
{
Icon Icon { get; }
string Name { get; }
string Info { get; }
void Start(IWin32Window controlPanelWindow, string command);
}
The class must also derive from the MarshalByRefObject
class (this is required for cross-domain invocations) and have a ControlPanelItemAttribute
attribute applied to it.
When all DLLs are compiled, they must be copied to some directory (%windir%\Microsoft.NET\ControlPanelItems is recommended).
If all files were copied to the recommended directory, then a Register.reg file can simply be executed to register the CplNet.dll file. Otherwise, the CplNet.dll file has to be registered manually, using the following command:
rundll32 %windir%\Microsoft.NET\ControlPanelItems\CplNet.dll,Register_RunDLL
(Of course, the appropriate path should be provided instead of that which is given above). If the command does not work (this sometimes happens, but I do not know why), a CplNetItem.dll file has to be copied to the GAC (the %windir%\assembly folder).
When an item is no longer needed, it can be simply deleted. When there are no items left, the CplNet.dll file can be unregistered (using an Unregister.reg file, or the command given below) and the whole folder can be deleted (and optionally, the CplNetItem.dll file can be removed from the GAC).
rundll32 %windir%\Microsoft.NET\ControlPanelItems\CplNet.dll,Unregister_RunDLL
How To Execute An Item with a Custom Command String
If one needs to run an item with a custom command string, then the following syntax must be used...
control.exe %windir%\Microsoft.NET\ControlPanelItems\CplNet.dll,@<i>,<p>
... where <i>
is the number of the item to run, and <p>
is the command string.
Example:
control.exe %windir%\Microsoft.NET\ControlPanelItems\CplNet.dll,@0,ABC 123
If the number of the item is not known, then the "Managed Control Panel Items" tool can be used to obtain it. The first item listed by this tool has number 0 assigned, the second has 1, etc.
History
- 1.0
- 11.07.2007 – First version (Windows 2000, XP, 2003, and Vista compatible)
- 05.12.2007 – Added license