Delphi 中注册表构件TRegistry 的应用

  在Delphi3.0 及以上版本中,提供了一个构件TRegistry。在程序中可以利用它来实现对WIN95/98/NT 注册表的操作,可以很方便地在注册表中增加、修改和删除键值。这样可以在程序中完成一些特殊的功能。 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

---- TRegistry 常用的属性和方法有(具体作用和用法请参考Delphi 帮

助):

RootKey、CreateKey、OpenKey、CloseKey、DeleteKey、ReadXXXX、WriteXXXX

(XXXX表示数据类型如String、Integer等)

    我们用到的属性和方法有:

    RootKey:注册表的根键名( 如HKEY_LOCAL_MACHINE等)

    OpenKey( KeyName:string; CanCreate:boolean )

    使当前键为KeyName,CanCreate 表示当指定的键不存在时是否创建,True 表示创建

SetKey( KeyName,KeyValue : string ):使键KeyName的值为KeyValue

---- 应用之一:让自己的程序随WIN95/98/NT 的启动而运行

    当然,你可以在"启动"程序组中加入程序的快捷方式,但这样做好象不大明智,因为大多数程序在安装时不会这样做,而是在通过在注册表增加键值,让WIN95/98/NT 在启动时运行自己的程序。如果打开注册表,找到HKEY_LOCAL_MACHINE "Software "Microsoft"Windows "CurrentVersion "Run,就会发现这个秘密了,原来许多自动运行的程序都在这里。你也可以在这里增加一个键,让你的程序也随着 WIN95/98/NT 的启动而自己运行,成为WINDOWS 下的TSR 程序。实现方法如下:

首先,在Uses 中加上Registry 单元

然后,写下面代码。

{将程序strExeFileName置为自动启动 }


 1 function  StartUpMyProgram ( strPrompt,strExeFileName : string ) : boolean; 
 2
 3 var  
 4
 5   registerTemp : TRegistry; 
 6
 7 begin  
 8
 9   registerTemp : =  TRegistry.Create; 
10
11    // 建立一个Registry实例 
12
13    with  registerTemp  do  
14
15      begin  
16
17       RootKey: = HKEY_LOCAL_MACHINE; 
18
19        // 设置根键值为HKEY_LOCAL_MACHINE 
20
21        // 找到Software\Microsoft\Windows\CurrentVersion\Run 
22
23        if  OpenKey( ' Software\Microsoft\Windows\CurrentVersion\Run ' ,True)  then  
24
25        // 写入自己程序的快捷方式信息 
26
27        begin  
28
29         WriteString( strPrompt, strExeFileName ); 
30
31         result : =  true; 
32
33        end  
34
35        else  result : =  false; 
36
37        // 善后处理 
38
39       CloseKey; 
40
41       Free; 
42
43      end
44
45 end
46
47 { 调用StartUpMyProgram, 
48
49 使Delphi随WINDOWS启动而自动运行  }  
50
51 procedure  TForm1.Button1Click(Sender: TObject); 
52
53 begin  
54
55    memo1.lines.add( ' 开始 ' ); 
56
57     if  StartUpMyProgram( ' delphi ' , ' C:\Program Files\borland\delphi3\bin\delphi32.exe ' then  
58
59      memo1.lines.add( ' 成功 '
60
61     else  
62
63      memo1.lines.add( ' 失败 '
64
65 end
66
67

---- 应用之二:实现文件关联

    当MS WORD 安装在你的系统中时,它会把.DOC 文件与自己关联,当你双击一个DOC 文件,就会启动MS WORD,打开你指定的DOC文件。你也可以把一个文件类型与一个程序关联起来,其秘密还是在注册表中。如果打开注册表,找到HKEY_CLASSES_ROOT,就会发现这里已经有很多文件类型。

    你也可以在这里增加一个键,建立自己的文件关联。

    建立文件关联,一般应有两个步骤:

    (1)根据文件类型的扩展名,指定对应的键名(如doc 文件对应的键为doc_auto_file)

    该键及其子键的值,将定义该类型的文件的类型说明和操作(如打开、编辑)说明

    (2)在指定的键名下,建立子键,指明文件类型说明和操作对应的程序信息

    例如,我们可以为.DBF 文件建立文件关联,其文件类型说明为"xBase 数据表",使其打开(Open)文件的操作对应程序C:"ProgramFiles"Borland"DBD"DBD32.EXE。首先,应在注册表的根键HKEY_CLASSES_ROOT 下建立一个键,键名为.DBF,默认值为DBF_Auto_File,表示DBF 类型文件的关联操作信息记录在键HKEY_CLASSES_ROOT"DBF_Auto_File 下;然后,建立键

HKEY_CLASSES_ROOT"DBF_Auto_File,并设其默认值为"xBase 数据表",表示文件类型说明;再建立键HKEY_CLASSES_ROOT"DBF_Auto_File"Shell"open"command,设置其默认值为C:"Program Files"Borland"DBD"DBD32.EXE  %1(其中"%1 "为命令行参数),表示打开操作对应的程序信息。

具体实现如下:同样,在Uses 中加上Registry 单元,  然后,写下面代码。

{将文件类型strFileExtension与程序

strExeFileName相关联,strDiscription为文件类型说明 }

function  AssignToProgram(strFileExtension,strDiscription,strExeFileName : string ) : boolean; 

var  

  registerTemp : TRegistry; 

begin  

  registerTemp :
=  TRegistry.Create; 

  
// 建立一个Registry实例 

  
with  registerTemp  do  

    
begin  

      RootKey:
= HKEY_CLASSES_ROOT; 

      
// 设置根键值为HKEY_CLASSES_ROOT 

      
// 根据文件类型的扩展名,创建或打开对应的键名.FileExt,如DBF对应 ' .DBF '  

      
if  OpenKey(  ' . '   +  strFileExtension, true )  then  

        
begin  

          result :
=  false; 

          exit; 

        
end

      
// 设置键.FileExt默认值为FileExt_Auto_File,如 ' .DBF ' 对应 ' DBF_Auto_File '  

      WriteString(
'' ,strFileExtension  +   ' _Auto_File ' ); 

      CloseKey; 

      
// 写入自己程序的信息 

      
// 根据文件类型的扩展名,创建或打开对应的键名 

      FileExt_Auto_File 

      
// ' .DBF ' 对应 ' DBF_Auto_File '  

      
if  OpenKey(strFileExtension  +   ' _Auto_File ' , true )  then  

        
begin  

          result :
=  false; 

          exit; 

        
end

      
// 设置默认值文件类型说明,如DBF可对应 ' xBase数据表 '  

      WriteString(
'' ,strDiscription); 

      CloseKey; 

      
// 创建或打开键名FileExt_Auto_File\Shell\open\command,该键为表示操作为 ' 打开 '  

      
// ' .DBF ' 对应 ' DBF_Auto_File\shell\open\command '  

      
if  OpenKey(strFileExtension  +   ' _Auto_File\shell\open\command ' , true )  then  

        
begin  

          result :
=  false; 

          exit; 

        
end

      
// 设置该键的默认值为打开操作对应的程序信息 

      
// 如DBF可对应 ' C:\Program Files\Borland\DBD\DBD32.EXE '  

      WriteString(
'' ,strExeFileName  +   '  %1 ' ); 

      CloseKey; 

      Free; 

  
end

end

{ 调用AssignToProgram,使DBF文件与DBD32.EXE关联  }  

procedure  TForm1.Button3Click(Sender: TObject); 

begin  

   memo1.lines.add(
' 开始 ' ); 

   
if  AssignToProgram( ' DBF ' , ' xBase数据表 ' , ' C:\Program Files\borland\dbd\dbd32.exe ' then  

     memo1.lines.add(
' 成功 '

   
else  

     memo1.lines.add(
' 失败 '

end


---- 应用之三:检测Win95/98/NT 系统中是否安装了Borland Database Engine

    当你的应用程序是一个基于BDE 的数据库应用程序时,如果运行在一个没有安装BDE 的Win95/98/NT 中,会出现让用户迷惑不解的错误。你可能需要在程序正常运行之前,检查系统中是否安装了BDE。由于 BDE 安装后会在注册表进行注册,你可以通过查询注册表来确定系统中是否安装了BDE,然后决定下一步采取什么行动。BDE 在注册表中的位置为:

    HKEY_LOCAL_MACHINE\Software\Borland\Database Engine,该键存在说明 BDE 已经安装。

具体的例子如下。

同样,在Uses 中加上Registry 单元

然后,写下面代码。

{检测系统中是否安装了BDE }


 1 function  IsBDEInstalled : boolean; 
 2
 3 var  
 4
 5   registerTemp : TRegistry; 
 6
 7 begin  
 8
 9   registerTemp : =  TRegistry.Create; 
10
11    // 建立一个Registry实例 
12
13    with  registerTemp  do  
14
15      begin  
16
17       RootKey: = HKEY_LOCAL_MACHINE; 
18
19        // 设置根键值为HKEY_LOCAL_MACHINE 
20
21        // 查询Software\Borland\Database Engine 
22
23       result : =  OpenKey( ' Software\Borland\Database Engine ' ,false); 
24
25        // 善后处理 
26
27       CloseKey; 
28
29       Free; 
30
31      end
32
33 end
34
35 { 调用IsBDEInstalled,检测系统中是否安装了BDE  }  
36
37 procedure  TForm1.Button4Click(Sender: TObject); 
38
39 begin  
40
41    memo1.lines.add( ' 开始 ' ); 
42
43     if  IsBDEInstalled  then  
44
45      memo1.lines.add( ' 已安装了BDE '
46
47     else  
48
49      memo1.lines.add( ' 未安装BDE '
50
51 end
52
53

---- 应用之四:在桌面建立程序的快捷方式

    当你的WIN95/98/NT 桌面上整齐地排列着各种程序的快捷方式时,也许你会体会到快捷方式的方便。你也可将自己设计的程序的快捷方式放在别人的桌面上。

    桌面上的一个快捷方式,对应Windows 目录下Destop 子目录中的一个ShellLink 文件(.LNK),你只要在这个目录下增加一个.LNK 文件就可以了。

    我们的任务,主要是利用TRegistry 从注册表中获取Desktop 的实际路径,默认为Windows 目录下的Desktop 子目录,如C:"PWIN98"Desktop。在注册表中Desktop 的实际路径对应的键为HKEY_CURRENT_USER "Software"MicroSoft "Windows "CurrentVersion "Explorer "Shell Folders "Desktop。

同样,在Uses 中加上Registry 单元

然后,写下面代码。

{为程序strExeFileName在桌面建立快捷方式,运行参数为strParameters }

  1 function  CreateShortcutOnDesktop( strExeFileName, strParameters : string ) : boolean; 
  2
  3 var  
  4
  5   registerTemp : TRegistry; 
  6
  7   strDesktopDirectory : widestring; 
  8
  9   shelllinkTemp : IShellLink; 
 10
 11   persistfileTemp : IPersistFile; 
 12
 13 begin  
 14
 15   registerTemp : =  TRegistry.Create; 
 16
 17    // 建立一个Registry实例 
 18
 19    with  registerTemp  do  
 20
 21      begin  
 22
 23       RootKey: = HKEY_CURRENT_USER; 
 24
 25        // 设置根键值为HKEY_CURRENT_USER 
 26
 27        // 找到Software\MicroSoft\Windows\CurrentVersion\Explorer\Shell Folders 
 28
 29        if   not  OpenKey( ' Software\MicroSoft\Windows\CurrentVersion\Explorer\Shell Folders ' ,True)  then  
 30
 31        // 写入自己程序的信息 
 32
 33          begin  
 34
 35           result : =  false; 
 36
 37           exit; 
 38
 39          end
 40
 41        // 读取项目Desktop的值,即Desktop的实际路径 
 42
 43       strDesktopDirectory : =  ReadString( ' Desktop ' ); 
 44
 45        // 善后处理 
 46
 47       CloseKey; 
 48
 49       Free; 
 50
 51    end
 52
 53    // 设置快捷方式的参数 
 54
 55   shelllinkTemp : =  IShellLink( CreateComObject(CLSID_ShellLink)); 
 56
 57    with  shelllinkTemp  do  
 58
 59      begin  
 60
 61       SetPath( PChar( strExeFileName ) ); 
 62
 63        // 设置程序文件全名 
 64
 65       SetArguments( PChar( strParameters) ); 
 66
 67        // 设置程序的命令行参数 
 68
 69        // 设置程序的工作目录 
 70
 71       SetWorkingDirectory( Pchar( ExtractFilePath( strExeFileName ) ) ); 
 72
 73      end
 74
 75 // 构造快捷方式的文件名(.LNK) 
 76
 77   strDesktopDirectory : =  strDesktopDirectory  +   ' \ '   +  ExtractFileName( strExeFileName ); 
 78
 79   strDesktopDirectory : =  copy( strDesktopDirectory,  1 , length( strDesktopDirectory )  -  length( ExtractFileExt( strExeFileName ) ) )  +   ' .LNK '
 80
 81 // 保存快捷方式的文件 
 82
 83   persistfileTemp : =  shelllinkTemp as IPersistFile; 
 84
 85    if  S_OK  =  persistfileTemp.Save( PWChar( strDesktopDirectory ) , false )  then  
 86
 87     result : =  true  // 保存成功,返回True 
 88
 89    else  result : =  false; 
 90
 91 end
 92
 93 { 调用CreateShortcutOnDesktop,为Delphi在桌面上建立快捷方式  }  
 94
 95 procedure  TForm1.Button2Click(Sender: TObject); 
 96
 97 begin  
 98
 99    memo1.lines.add( ' 开始 ' ); 
100
101     if  CreateShortcutOnDesktop( ' C:\Program Files\borland\delphi3\bin\delphi32.exe ' , ' %1 ' )   then  
102
103      memo1.lines.add( ' 成功 '
104
105     else  
106
107      memo1.lines.add( ' 失败 '
108
109 end
110
111

【结语】:上面几个应用只是TRegistry 一些简单的应用,有了这些知识,你就可以根据自己的需要来定制和改善Winodws 系统了。

转载于:https://www.cnblogs.com/zscy/archive/2008/05/21/1203953.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值