谁有用DELPHI实现修改注册表某键权限的代码呀?

Description of your first forum.

谁有用DELPHI实现修改注册表某键权限的代码呀?

帖子snail1024 » 星期一, 2008年9月15日 22:05


可不可以贴出来大家共享一下呀?
 
 
 

谁有用DELPHI实现修改注册表某键权限的代码呀?

帖子luoyanqing119 » 星期二, 2008年9月16日 08:59


应该网上有很多这种资料及代码吧
 
 
 

谁有用DELPHI实现修改注册表某键权限的代码呀?

帖子snail1024 » 星期二, 2008年9月16日 11:58


DELPHI的我没找到,VC的我看不懂呀!
 
 
 

谁有用DELPHI实现修改注册表某键权限的代码呀?

帖子地质灾害 » 星期二, 2008年9月16日 14:36


别说是VC 请说C++。没看懂就学C++
 
 
 

谁有用DELPHI实现修改注册表某键权限的代码呀?

帖子snail1024 » 星期二, 2008年9月16日 18:03


地质灾害,请您指点下噻!
 
 
 

谁有用DELPHI实现修改注册表某键权限的代码呀?

帖子luoyanqing119 » 星期三, 2008年9月17日 08:29


在Delphi中轻松操作注册表
 
在应用程序中,经常需要对注册表进行各种操作,如将程序名称、安装路径等信息保存到注册表中。Delphi对相应API函数做了进一步封装,使得在应用程序中操作注册表更加简单。


1、原理

Delphi提供了TRegistry类,它直接继承自TObject类,主要属性有:RootKey等,主要方法有:Create,CreateKey(Key),OpenKey(Key,CanCreate),WriteString(Name,Value),ReadString(Name),CloseKey,Free等,下面对它们进行简单介绍。

1、1、RootKey属性

指定当前操作的注册表主键,共有HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS、HKEY_CURRENT_CONFIG五种取值,默认值为HKEY_CURRENT_USER。

1、2、CreateKey方法

    函数声明为function CreateKey(const Key: String):Boolean;,用于在注册表中新建项,项的名称为参数Key的值。

1、3、OpenKey方法

    函数声明为function OpenKey(const Key: String; CanCreate: Boolean):Boolean;,其中参数Key指定要打开的注册表的项,参数CanCreate指明当要打开的项不存在时是否创建,默认值为False;函数返回值为布尔类型,如果打开成功返回True,否则返回False。

1、4、WriteString方法

    过程声明为procedure WriteString(const Name, Value: String);,其中参数Name指明要写入的注册表的字符串的名称,参数Value为要写入的字符串的值。如果该字符串不存在则写入,否则覆盖原来的取值。

1、5、ReadString方法

    函数声明为function ReadString(const Name: String):String;,其中参数Name为要读取的字符串的名称,函数返回值为要读取的字符串的值,是字符串类型。如果该字符串在注册表中不存在,返回值为空字符串。


2、实例

    下面分别为将信息写入注册表和从注册表中读取信息的例子。

2、1、将信息写入注册表

    相应代码如下:

var

  reg:TRegistry;//声明一个TRegistry类变量

  ...

begin

  reg:=TRegistry.Create;//创建实例

  reg.RootKey:=HKEY_CURRENT_USER;//指定需要操作的注册表的主键

  if reg.OpenKey('\Software\Delphi使用技巧',true) then//如果打开成功则进行以下操作

  begin

    reg.WriteString('文章名称','在Delphi中轻松操作注册表');//将需要保存的信息写入注册表

    reg.CloseKey;//关闭注册表

  end;

  reg.Free;//释放变量所占内存

  ...

end;


2、2、从注册表中读取信息

    相应代码如下:

var

  reg:TRegistry;//声明一个TRegistry类变量

  s:String;//声明一个字符串变量用来存放要读取的信息

  ...

begin

  reg:=TRegistry.Create;//创建实例

  reg.RootKey:=HKEY_CURRENT_USER;//指定需要操作的注册表的主键

  if reg.OpenKey('\Software\Delphi使用技巧',true) then//如果打开成功则进行以下操作

  begin

    s:=reg.ReadString('文章名称');//从注册表中读取对应字符串的值

    //如果该字符串不存在则返回值为空字符串

    reg.CloseKey;//关闭注册表

  end;

  reg.Free;//释放变量所占内存

  ...

end;


3、总结

本文首先介绍了在Delphi中操作注册表的方法,然后举例说明了具体应用。




一、创建和释放TRegistry对象

  1.创建TRegistry对象。操作注册表前要创建TRegistry对象:

       Reg:= TRegistry.Create;

  2.释放TRegistry对象。注册表操作结束后,应释放TRegistry对象所占内存:

       Reg.Destroy。

二、指定要操作的键

  操作注册表时,首先应指定操作的主键:即先给属性RootKey赋值以指定根键,

      然后用方法OpenKey来指定要操作的主键名,最后要以CloseKey关闭主健。

  1.指定根键(RootKey)。

  根键是注册表的入口,也注册表信息的分类,其值可为:

n         HKEY—CLASSES—ROOT:存储整个系统对象类信息,如ActiveX对象注册、

文件关联等信息。

n         HKEY—CURRENT—USER:存储当前用户的配置信息。为属性RootKey的默认值。

n         HKEY—LOCAL—MACHINE:存储当前系统的软硬件配置信息。应用程序自己的信息可以存储在该根键下。

n         HKEY—USERS:存储所有用户通用的配置信息。

n         还可以是HKEY—CURRENT—CONFIG、HKEY—DYN—DATA。

  2.指定要操作的主键。

   Function OpenKey(const Key: string; CanCreate: Boolean): Boolean;

   Key:主键名,是键名全名中除去根键的部分,如Software\Borland\Delphi。

   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.读取信息一例

   // 从注册表读取信息

function ReadFromReg(Const Key:string; KeyName:String):string;

var

Reg: TRegistry;

DataValue: String

begin

Reg := TRegistry.Create;

wite Reg do

try

RootKey := HKEY_CURRENT_USER;

If OpenKey(Key,true) then

begin

   DataValue := ReadString (KeyName);

  CloseKey;

   Result := DataValue;

end;

finally

Free;

inherited;  

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.写入信息一例。

procedure SaveToReg(Const Key:string; KeyName,DataValue:String);

var

Reg: TRegistry;

begin

Reg := TRegistry.Create;

with Reg do

begin

try

        RootKey := CRootKey;

        If OpenKey (Key,True) then

        begin

              WriteString(KeyName,DataValue);

              CloseKey;

end;

finally

       Free;

       inherited;

end;

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\RemoteAccess\Addresses下的数值名称的方法来进行。

  6.判断数值名称存在、数值名称改名。

²        ValueExists用于判断数值名称是否存在:

  function ValueExists(const Name: string): Boolean;

  返回值为True表示数值名称存在。

²        RenameValue用于数值名称改名:

  procedure RenameValue(const OldName, NewName: string);
 
 
 

谁有用DELPHI实现修改注册表某键权限的代码呀?

帖子luoyanqing119 » 星期三, 2008年9月17日 08:30


DELPHI有现成的类操作注册表,都给你说网上很多了.
 
 
 

谁有用DELPHI实现修改注册表某键权限的代码呀?

帖子wql » 星期三, 2008年9月17日 09:56


爱!
楼主提出的是权限问题!不是上面的代码!
 
 
 

谁有用DELPHI实现修改注册表某键权限的代码呀?

帖子luoyanqing119 » 星期四, 2008年9月18日 08:30


问题:谁有用DELPHI实现修改注册表某键权限的代码呀? ( 积分:100, 回复:7, 阅读:41 )
分类:Windows API ( 版主:amo, cAkk )  
来自:snail1024, 时间:2008-9-15 22:05:00, ID:3921305 [显示:小字体 | 大字体]  

可不可以贴出来大家共享一下呀?  

 ------------------------------------不好意思,没仔细看问题.