Delphi 控制面板Win7小程序

Delphi 控制面板Win7小程序,delphi,windows-7,control-panel,Delphi,Windows 7,Control Panel,在DelphiXe中,我通过主项目创建控制面板的新小程序,更改图标、名称等。 对于激活反应,我写Showmessage(‘Test’);编译、接收dll、在*.cpl中重命名。在win.explorer中,此文件开头会显示消息。 在WinXp中,我将此文件插入c:\windows\system32中,打开控制面板窗口,我看到小程序,在其开始时,测试消息突出显示。 我在Win7x64(或2008r2)上做得太多了,但在我没有观察到的小程序的控制面板中,重新启动问题并不能解决。 尝试在c:\wind

在DelphiXe中,我通过主项目创建控制面板的新小程序,更改图标、名称等。 对于激活反应,我写Showmessage(‘Test’);编译、接收dll、在*.cpl中重命名。在win.explorer中,此文件开头会显示消息。 在WinXp中,我将此文件插入c:\windows\system32中,打开控制面板窗口,我看到小程序,在其开始时,测试消息突出显示。 我在Win7x64(或2008r2)上做得太多了,但在我没有观察到的小程序的控制面板中,重新启动问题并不能解决。 尝试在c:\windows\syswow64中复制文件,但没有结果。 如何强制小程序显示在Win7下的面板中

代码:


在XP上,您可以将
.cpl
文件放到系统文件夹中,然后使用它:

从Windows XP开始,新的控制面板项DLL应安装在程序文件文件夹下的相关应用程序文件夹中不需要注册存储在System32目录中扩展名为.cpl的项;它们会自动显示在控制面板中。使用CPlApplet的所有其他控制面板项目必须通过以下两种方式之一注册:

  • 如果控制面板项对所有用户都可用,请在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Control Panel\Cpls子项中添加一个REG_EXPAND_SZ值(设置为DLL路径),以每台计算机为基础注册路径

  • 如果控制面板项在每个用户的基础上可用,请使用HKEY_CURRENT_user作为根密钥,而不是HKEY_LOCAL_MACHINE

但是,在Vista和更高版本上,您的
.cpl
小程序需要在注册表中注册。将其放到系统文件夹中可能不够

控制面板小程序的类型
有三种类型的控制面板小程序:

  • 命令对象运行注册表中指定命令的小程序

  • Shell文件夹小程序在控制面板中打开。shell文件夹小程序的示例包括字体文件夹、管理工具、个性化设置、系统、用户帐户和程序

  • 实现
    CplApplet
    功能的CPLs小程序

命令对象是最容易实现的

添加和注册您自己的小程序和任务
在Windows Vista中,将自己的小程序添加到控制面板更容易。软件开发人员现在可以轻松地将自己的小程序和任务添加到控制面板中

在以前版本的Windows中,可以使用Windows注册表和CplApplet函数将小程序添加到控制面板中。操作系统使用注册表枚举包含小程序的模块。调用每个模块的CplApplet函数以显示小程序、其图标和说明,然后调用小程序。这个过程比使用命令对象更复杂,因为小程序必须实现CplApplet接口。尽管此过程在Windows Vista中仍然受支持,但鼓励使用命令对象,因为它更易于实现

现在,在Windows Vista中,您只需编写一个可执行文件(.exe),将其注册为命令对象,小程序就会出现在控制面板中。例如,您可以编写一个可执行文件MySystemApplet.exe,对于您的小程序,只需将MySystemApplet.exe注册为shell命令对象,而不是使用CplApplet接口的实现繁琐地修改二进制文件,即可将小程序添加到控制面板


顾,你错过了几个步骤(关于注册)。请尝试阅读MSDN文档,谢谢!不知道,那现在的小程序也需要注册。将标记您的评论质量的答案,但我不知道在这里它作出。
library Project1;

uses
 CtlPanel,
 AppletModule1 in 'AppletModule1.pas' {AppletModule1AppletModule: TAppletModule};

exports CPlApplet;

{$R *.RES}

{$E cpl}

begin
 Application.Initialize;
 Application.CreateForm(TAppletModule1AppletModule, AppletModule1AppletModule);
 Application.Run;
end.

////////////// and Unit module

unit AppletModule1;

interface

uses
 Windows, Messages, SysUtils, Classes, CtlPanel, Dialogs;

type
 TAppletModule1AppletModule = class(TAppletModule)
   procedure AppletModuleActivate(Sender: TObject; Data: Integer);
 private
 { private declarations }
 protected
 { protected declarations }
 public
 { public declarations }
 end;

var
 AppletModule1AppletModule: TAppletModule1AppletModule;

implementation

{$R *.DFM}

procedure TAppletModule1AppletModule.AppletModuleActivate(Sender: TObject;
 Data: Integer);
begin
Showmessage('Test');
end;

end.