Delphi 中注册表构件TRegistry 的应用
---- 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
- 点赞
- 收藏
- 分享
- 文章举报
- Delphi 中注册表构件TRegistry 的应用
- 用KOL操作注册表(非DELPHI的registry)
- 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 应用在线演示/例子
- 《Delphi 7跨平台控件开发与应用》目录
- DELPHI 5种运行程序的方法具体应用实例(带参数)
- Delphi自定义消息应用
- 15.Delphi数据访问部件的应用及编程
- Delphi开发MongoDB应用
- Delphi中的集成VBS脚本语言应用
- windows 注册表查询及应用
- 注册表应用指南
- FireFox(火狐)浏览器内核 gecko 之delphi应用
- delphi下webbrowser的应用
- 基于构件开发的应用框架设计
- Java并发(二)现代并发应用的构件
- 注册表应用举例
- GDI+ 在Delphi程序的应用 -- 仿Photoshop的明度调整
- GDI+ 在Delphi程序的应用 -- 图像二值化
- Delphi组件应用实例文本文件__0001
- [转]多层数据库应用基于Delphi DataSnap方法调用的实现(三)对象池技术