65.9K
CodeProject 正在变化。 阅读更多。
Home

托管的控制面板项

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.75/5 (23投票s)

2007年7月11日

CPL

2分钟阅读

viewsIcon

78643

downloadIcon

1573

使用 .NET Framework 创建控制面板项目

屏幕截图

包含三个托管项目的控制面板

Control Panel which contains three managed items

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

Application which displays installed managed items

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

Sample application executed with a command string

引言

我一直想仅使用 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 日 – 添加许可证
© . All rights reserved.