以下是程序实例教程,功能是写入一个注册表启动项目到windows注册表中HKEY-LOCAL-MACHINE中:
放入一个按钮组件,标题取为‘开始写入值’另一个按钮是‘删除写入值’。
功能就是写入/删除注册表项:c:\qmenu.exe到系统注册表项目中的启动项目中去。
双击按钮组件,转到代码编辑窗口,注意,先在顶部的uses后面引用部份加上注册表单元,Registry,然后在按钮组件单击事件中分别插入以下代码:
procedure TForm1.btn1Click(Sender: TObject); //写入值
var
tmpReg : TRegistry;
begin
tmpReg := TRegistry.Create;
try
tmpReg.RootKey := HKEY_LOCAL_MACHINE; //设置要操作的注册表的根键值
if tmpReg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run', True) then //如果打开此注册表成功,刚进入写入操作.
begin
tmpReg.WriteString('delphi测试', 'c:\qmenu.exe'); //开始写入操作
end;
finally
tmpReg.Free;
end;
end;
这样,点击写入按钮时,你可以在注册表中看到效果:
procedure TForm1.btn2Click(Sender: TObject); //删除值
var
tmpReg : TRegistry;
begin
tmpReg := TRegistry.Create;
try
tmpReg.RootKey := HKEY_LOCAL_MACHINE; //设置要操作的注册表的根键值
if tmpReg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run', True) then //如果打开此注册表成功,刚进入写入操作.
begin
tmpReg.DeleteValue('delphi测试'); //开始删除值操作
end;
finally
tmpReg.Free;
end;
end;
下载本例源程序:
注册表.rar
以下是详细的delphi的操作注册表的使用方法,来自网上收集:
32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息。 一、创建和释放TRegistry对象 1.创建TRegistry对象。为了操作注册表,要创建一个TRegistry对象:ARegistry := TRegistry.Create; 2.释放TRegistry对象。对注册表操作结束后,应释放TRegistry对象所占内存:ARegistry.Destroy。
二、指定要操作的键 操作注册表时,首先应指定操作的主键:先给属性RootKey赋值以指定根键,然后用方法OpenKey来指定要操作的主键名。 1.指定根键(RootKey)。 根键是注册表的入口,也注册表信息的分类,其值可为: HKEY-CLASSES-ROOT:存储整个系统对象类信息,如ActiveX对象注册、文件关联等信息。 HKEY-CURRENT-USER:存储当前用户的配置信息。为属性RootKey的默认值。 HKEY-LOCAL-MACHINE:存储当前系统的软硬件配置信息。应用程序自己的信息可以存储在该根键下。 HKEY-USERS:存储所有用户通用的配置信息。 还可以是HKEY-CURRENT-CONFIG、HKEY-DYN-DATA。 2.指定要操作的主键。 Function OpenKey(const Key: string; CanCreate: Boolean): Boolean; Key:主键名,是键名全名中除去根键的部分,如Software。 CanCreate:在指定的主键名不存在时,是否允许创建该主键,True表示允许。 返回值True表示操作成功。 3.关闭当前主键。 在读取或存储信息之后,应及时将关闭当前主键:procedure CloseKey。
三、从注册表中读取信息 Read系列方法从注册表读取指定的信息(字符串、二进制和十六进制),并转换为指定的类型。 1.Read系列方法。 function ReadString(const Name: string): string; 读取一个字符串值,Name为字符串名称。 function ReadInteger(const Name: string): Integer; 读取一个整数值,Name为整数名称。 function ReadBinaryData(const Name: string; var Buffer; BufSize: Integer):Integer; 读取二进制值,Name为二进制值名称,Buffer为接收缓冲区,BufSize为缓冲区大小,返回为实际读取的字节数。 其它方法还有:ReadBool、ReadCurrency、ReadDate、ReadDateTime、ReadFloat、ReadTime。 2.读取信息一例(显示Windows的版本)。 在HKEY-LOCAL-MACHINE下,有三个字符串值Version、VersionNumber和SubVersionNumber,用于记录当前Windows的版本号。 {请在Uses中包含Registry单元} procedure TForm1.Button1Click(Sender:TObject); var ARegistry : TRegistry; begin ARegistry := TRegistry.Create; //建立一个TRegistry实例 with ARegistry do begin RootKey := HKEY-LOCAL-MACHINE;//指定根键为HKEY-LOCAL-MACHINE //打开主键Software if OpenKey( ′Software′,false ) then begin memo1.lines.add('Windows版本:′+ ReadString(′Version′)); memo1.lines.add('Windows版本号:′ + ReadString(′VersionNumber′)); memo1.lines.add(′Windows子版本号:′ + ReadString(′SubVersionNumber′)); end; CloseKey;//关闭主键 Destroy;//释放内存 end; end;
四、向注册表中写入信息 Write系列方法将信息转化为指定的类型,并写入注册表。 1.Write系列方法。 procedure WriteString(const Name, value: string); 写入一个字符串值,Name为字符串的名称,value为字符串值。 procedure WriteInteger(const Name: string; value: Integer); 写入一个整数值。 procedure WriteBinaryData(const Name: string; var Buffer; BufSize: Integer); 写入二进制值,Name为二进制值的名称,Buffer为包含二进制值的缓冲区,BufSize为缓冲区大小。 其它方法还有:WriteBool、WriteCurrency、WriteDate、WriteDateTime、WriteFloat、WriteTime。 2.写入信息一例。 下面程序使Delphi随Windows启动而自动运行。 var ARegistry : TRegistry; begin ARegistry := TRegistry.Create; //建立一个TRegistry实例 with ARegistry do begin RootKey:=HKEY-LOCAL-MACHINE; if OpenKey(′Software′,True) then WriteString(′delphi′,′C:Files.exe′); CloseKey; Destroy; end; end;
五、键值维护 除了在注册表中读取、存储外,程序可能还需要增加主键、删除主键、主键改名、数据值改名等。 1.创建新主键:function CreateKey(const Key: string): Boolean。 Key即为主键名,返回值True表示操作成功。 2.删除主键:function DeleteKey(const Key: string): Boolean。 Key即为主键名,返回值True表示操作成功。 3.复制或移动主键:procedure MoveKey(const OldName, NewName: string; Delete: Boolean)。 OldName、NewName分别表示源主键名和目标主键名;Delete表示是否删除源主键,True表示删除,False表示保留。 复制或移动一个主键将复制或移动该子键下的所有数据值和子键内容。 4.判断指定主键是否存在,其下是否有主键,并获取主键名称。 KeyExists用于判断指定主键是否存在: function KeyExists(const Key: string): Boolean;//返回值为True表示主键存在。 HasSubKeys用于判断指定主键下是否有子键:function HasSubKeys: Boolean; 返回值为True表示主键下有子键。 GetKeyNames用于获取子键名称:procedure GetKeyNames(Strings: TStrings); Strings用于返回当前主键下各子键的名称。 5.获取主键下的数据值名称:procedure GetvalueNames(Strings: TStrings)。 Strings用于返回当前主键下各数值名称。 如要获取当前系统中的拨号连接名称,可利用获取主键HKEY-USERS .DEFAULT下的数值名称的方法来进行。 6.判断数值名称存在、数值名称改名。 valueExists用于判断数值名称是否存在: function valueExists(const Name: string): Boolean; 返回值为True表示数值名称存在。 Renamevalue用于数值名称改名: procedure Renamevalue(const OldName, NewName: string); 以上是注册表常用操作所对应的TRegistry的方法和属性,其它方法和属性请参见Delphi联机帮助文件。 |