托管的控制面板项






4.75/5 (23投票s)
使用 .NET Framework 创建控制面板项目
屏幕截图
包含三个托管项目的控制面板

一个显示已安装托管项目的应用程序

一个使用自定义命令字符串执行的示例应用程序

引言
我一直想仅使用 C# 创建基于 DLL 的控制面板项目。当然,我无法实现这一点,因为 Visual C# 编译器无法像非托管编译器(Delphi、Visual C++)那样导出方法。前一段时间,我找到了一篇文章:如何自动化将 .NET 函数导出到非托管程序,这使之成为可能。
可以说,控制面板项目可以创建为普通的 EXE 文件。这是真的。但每个基于 EXE 的项目都必须单独在 Windows 注册表中注册。当使用我开发的类创建项目(作为 DLL 文件)时,只需将其复制到特定文件夹即可(注册了 CplNet.dll 文件的位置)。
Using the Code
我创建的类简化了控制面板项目的创建。要创建托管控制面板项目,必须创建一个实现 IControlPanelItem
接口的类。
// Interface which must be implemented by each Control Panel item.
public interface IControlPanelItem : IDisposable
{
// Icon of a Control Panes item.
Icon Icon { get; }
// Name of a Control Panes item (max. 32 characters).
string Name { get; }
// Description/tooltip/status bar string
// of a Control Panes item (max. 64 characters).
string Info { get; }
// Shows the Control Panel item's window.
// controlPanelWindow – The control panel window handle.
// command – The optional command string.
void Start(IWin32Window controlPanelWindow, string command);
}
该类还必须派生自 MarshalByRefObject
类(这对于跨域调用是必需的),并具有 ControlPanelItemAttribute
属性应用于它。
编译所有 DLL 后,必须将它们复制到某个目录(建议使用 %windir%\Microsoft.NET\ControlPanelItems)。
如果所有文件都复制到推荐的目录,则只需执行 Register.reg 文件即可注册 CplNet.dll 文件。否则,必须使用以下命令手动注册 CplNet.dll 文件
rundll32 %windir%\Microsoft.NET\ControlPanelItems\CplNet.dll,Register_RunDLL
(当然,应提供适当的路径而不是上面给出的路径)。如果该命令不起作用(有时会发生这种情况,但我不知道为什么),则必须将 CplNetItem.dll 文件复制到 GAC(%windir%\assembly 文件夹)。
当不再需要某个项目时,可以简单地将其删除。当不再有项目时,可以注销 CplNet.dll 文件(使用 Unregister.reg 文件或下面给出的命令),然后可以删除整个文件夹(并且可以选择从 GAC 中删除 CplNetItem.dll 文件)。
rundll32 %windir%\Microsoft.NET\ControlPanelItems\CplNet.dll,Unregister_RunDLL
如何使用自定义命令字符串执行项目
如果需要使用自定义命令字符串运行项目,则必须使用以下语法...
control.exe %windir%\Microsoft.NET\ControlPanelItems\CplNet.dll,@<i>,<p>
...其中 <i>
是要运行的项目的编号,<p>
是命令字符串。
示例
control.exe %windir%\Microsoft.NET\ControlPanelItems\CplNet.dll,@0,ABC 123
如果不知道项目的编号,则可以使用“托管控制面板项目”工具获取它。此工具列出的第一个项目编号为 0,第二个项目编号为 1,依此类推。
历史
- 1.0
- 2007 年 7 月 11 日 – 第一个版本(兼容 Windows 2000、XP、2003 和 Vista)
- 2007 年 12 月 5 日 – 添加许可证