在delphi中用什么方法访问注册表?(50分)

  • 主题发起人 主题发起人 lovesun
  • 开始时间 开始时间
可以用 TRegistry,也可以用 API 函数,帮助里很清楚
不过要读写键的值(不是键下面的值)好象只能用API
 
通过TRegistry类,你查查帮助吧。
 
uses Registry;
....
var MyReg:TRegistry;
begin

MyReg:=TRegistry.Create;
MyReg.RootKey:=HKEY_LOCAL_MACHINE;
IF MyReg.OpenKey(/software/Microsoft/windows/run,false) then

writestring('ss','ssss')
................
 
Agree ZRWeng
 
转!
用Delphi操作Windows 95/NT注册表

  类似于Windows 3.x中的ini文件,Windows 95、Windows NT中的注册表记录了有
关Windows系统、应用软件运行时的初始化参数等。用户经常需要在程序中操作注册
表,以控制软件的启动及保存软件运行中的若干主要参数等。
  Windows注册表的结构
  运行Regedit,可以进入注册表编辑器。如下图。图1
  上图中左框表示注册表的主键;右框中的名称指键值名,数据指键值;状态栏中显
示了当前打开的完整的主键名称。可以看出,整个注册表以树的结构及规则来组织,键
值名和键值组成了该树的叶子。
  操作注册表实例
  Delphi 3.0中的registry.dcu文件定义注册表的数据结构,并提供了TRegIniFile
这个不可视的控件。在程序中可通过该控件来操作注册表。
下面的例子描述了新建(修改)、读取、删除Windows注册表中
的主键HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windo ws/Curre ntVersion/Run下
的键值名RemoteOperate和键值remoteControl.exe 。
  unit s_registry;

  interface
  uses
    Windows, Messages, SysUtils, Classes, Graphics, Contr ols, Forms,
Dial ogs, StdCtrls,registry;

  {注意:registry必须自己加上}
  type
  TForm1 = class(TForm)
  new: TButton;

  read: TButton;

  delete: TButton;

  procedure newClick(Sender: TObject);

  procedure readClick(Sender: TObject);

  procedure deleteClick(Sender: TObject);

  private
  { Private declarations }
  public
  { Public declarations }
  end;


  var
  Form1: TForm1;

  implementation
  {$R *.DFM}
  {新建(修改)注册表}
  procedure TForm1.newClick(Sender: TObject);

  var ini : TRegIniFile;

  begin

  ini := TRegIniFile.Create(‘');

  {创建TRegIniFile对象}
  ini.RootKey:=HKEY_LOCAL_MACHINE;

  {改变Rookey,缺省为HKEY_USERS}
  ini.WriteString(‘Software/Microsoft/Windows/CurrentVers ion/Run',{主键}
  ‘RemoteOperate', {键值名,若该名称与主键下的键值名相同,
则修改它的键值。否则,新建键值名及键值}
  ‘remoteControl.exe');  {键值}
    ini.Free;

  end;


  {读取键值}
  procedure TForm1.readClick(Sender: TObject);

  var ini  : TRegIniFile;

   RegStr: String;

  begin

   ini := TRegIniFile.Create(‘');

    ini.RootKey:=HKEY_LOCAL_MACHINE;

    RegStr:=ini.ReadString(‘Software/Microsoft/Windows/C urrentVersion/Ru n’,‘RemoteOperate’,‘');

  ini.Free;

  ShowMessage(RegStr);

  end;


  {删除键值名及键值}
  procedure TForm1.deleteClick(Sender: TObject);

  var ini  : TRegIniFile;

  begin

    ini := TRegIniFile.Create(‘');

    ini.RootKey:=HKEY_LOCAL_MACHINE;

    ini.DeleteKey(‘Software/Microsoft/Windows/CurrentVer sion/Run',‘Remo teOperate');

    ini.Free;

  end;


  end.

  上面的例子只描述了键值是字符串的情况。
用TRegIniFile的Rea dBool、ReadInteg er、WriteBool、WriteInteger方法
可对布尔型、整型的数据值进行操作。
 
用 treginifile ,简单。
 
能不能帮我写个用API函数如:RegQueryValue访问注册的方法?
 
TRegistry 看帮助
分为读, 写,键值是否存在,创建和关闭几个大类
 
简单得很,楼上几位已经说得差不多了

给点分
 
function htwReadRegisry( RegKey :string
Default :string
MyRootKey : Hkey;
MyOpenKey :string): string
var
Registry: TRegistry;
S : string;
begin

Registry:= TRegistry.Create;
try
begin

Registry.RootKey :=MyRootKey;
// HKEY_CURRENT_USER;
Registry.OpenKey(MYOpenKey,false);
// Registry.OpenKey('/Software/MachineAdministrator',false);
S := Registry.ReadString(RegKey);
end
finally
begin

Registry.CloseKey;
Registry.Free;
end;

if Trim(S)='' then
Result := Default
else
Result := S;
end;


end;


procedure htwWriteRegisry(RegKey :string asValueTobewrited : string;
MyRootKey : Hkey;
MyOpenKey :string );
var
Registry: TRegistry;
begin

Registry:= TRegistry.Create;
try
begin

Registry.RootKey :=MyRootKey;
// HKEY_CURRENT_USER;
Registry.OpenKey(MyOpenKey,true);
//Registry.OpenKey('/Software/MachineAdministrator',true);
Registry.WriteString(RegKey,asValueTobewrited);
end
finally
begin

Registry.CloseKey;
Registry.Free;
end;

end;

end;




调用方法:
try
htwWriteRegisry('sShortDate','yyyy-MM-dd' ,HKEY_LOCAL_MACHINE, '/Control Panel/International');
htwWriteRegisry('sShortDate','yyyy-MM-dd' ,HKEY_LOCAL_MACHINE, '/.DEFAULT/Control Panel/International');
setlocaleinfo(LOCALE_SYSTEM_DEFAULT,LOCALE_SDATE,'yyyy-MM-dd');
except
end;


///
var
sDialName :string;

try
sDialName:=htwReadRegisry('DialupName','我的连接' ,HKEY_CURRENT_USER, '/SoftWare/vgtable');
except
ShowMessage('写注册表失败');
end;




 
后退
顶部