uses Registry;
procedure TForm1.Show(Sender: TObject);
var
reg: TRegistry;
begin
reg.RootKey := HKEY_LOCAL_MACHINE
reg.OpenKey ('software\borland\Database Engine', false);
ShowMessage(reg.ReadString('dllpath'));
reg.CloseKey;
reg.Free;
end;
procedure TForm1.Show(Sender: TObject);
var
reg: TRegistry;
begin
reg.RootKey := HKEY_LOCAL_MACHINE
reg.OpenKey ('software\borland\Database Engine', false);
ShowMessage(reg.ReadString('dllpath'));
reg.CloseKey;
reg.Free;
end;
解决方案 »
- 100分求教:DLL中的MDI子窗体中,回车和TAB无效?
- dephi 中 Sender 的意义???
- dbExpress的图形字段DBImage为什么不能用?
- 24才开始学习DELPHI晚吗?
- 谁有access格式的五笔编码表???????或者谁能将我这份TXT格式的转成MDB格式的???■■■■■■■■■■■■■
- 为何在我的应用程序中打开一个表后,其他应用程序就打不开此表了呢?急啊!
- fastreport247运行res\chinese\mak.bat和makdll.bat.装完后菜单变俄文?无法是中文吗?
- 请教Delphi rotateimage 组件的用法
- ◇◆◆◆◇ListView中如何使特定的某一行的字体变为“粗体”?
- delphi2007+Sqlite3+tz控件 存储二进制数据问题 在线等++++
- 怎么样让登陆窗口在主窗口之前出现呢??
- 请各位同道举一个继承的例子我看看.一定送分
In TRegistryCloseKey
Create
CreateKey
DeleteKey
DeleteValue
Destroy
GetDataInfo
GetDataSize
GetDataType
GetKeyInfo
GetKeyNames
GetValueNames
HasSubKeys
KeyExists
LoadKey
MoveKey
OpenKey
OpenKeyReadOnlyReadBinaryData
ReadBool
ReadCurrency
ReadDate
ReadDateTime
ReadFloat
ReadInteger
ReadString
ReadTime
RegistryConnect
RenameValue
ReplaceKey
RestoreKey
SaveKey
UnLoadKey
ValueExists
WriteBinaryDataWriteBool
WriteCurrency
WriteDate
WriteDateTime
WriteExpandString
WriteFloat
WriteInteger
WriteString
WriteTime
王 发 军
---- 在Delphi3.0 及 以 上 版 本 中, 提 供 了 一 个 构 件TRegistry。 在 程 序 中 可 以 利 用 它 来 实 现 对WIN95/98/NT 注 册 表 的 操 作, 可 以 很 方 便 地 在 注 册 表 中 增 加、 修 改 和 删 除 键 值。 这 样 可 以 在 程 序 中 完 成 一 些 特 殊 的 功 能。 ---- 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置为自动启动 }
function StartUpMyProgram
( strPrompt,strExeFileName : string ) : boolean;
var
registerTemp : TRegistry;
begin
registerTemp := TRegistry.Create;
//建立一个Registry实例
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE;
//设置根键值为HKEY_LOCAL_MACHINE
//找到Software\Microsoft\Windows\CurrentVersion\Run
if OpenKey('Software\Microsoft\Windows
\CurrentVersion\Run',True) then
//写入自己程序的快捷方式信息
begin
WriteString( strPrompt, strExeFileName );
result := true;
end
else result := false;
//善后处理
CloseKey;
Free;
end;
end;{调用StartUpMyProgram,
使Delphi随WINDOWS启动而自动运行 }
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.lines.add('开始');
if StartUpMyProgram('delphi','C:\Program
Files\borland\delphi3\bin\delphi32.exe') then
memo1.lines.add('成功')
else
memo1.lines.add('失败')
end;---- 应 用 之 二: 实 现 文 件 关 联 ---- 当MS WORD 安 装 在 你 的 系 统 中 时, 它 会 把.DOC 文 件 与 自 己 关 联, 当 你 双 击 一 个DOC 文 件, 就 会 启 动MS WORD, 打 开 你 指 定 的DOC 文 件。 你 也 可 以 把 一 个 文 件 类 型 与 一 个 程 序 关 联 起 来, 其 秘 密 还 是 在 注 册 表 中。 如 果 打 开 注 册 表, 找 到HKEY_CLASSES_ROOT, 就 会 发 现 这 里 已 经 有 很 多 文 件 类 型。 ---- 你 也 可 以 在 这 里 增 加 一 个 键, 建 立 自 己 的 文 件 关 联。 ---- 建 立 文 件 关 联, 一 般 应 有 两 个 步 骤: ---- ( 1) 根 据 文 件 类 型 的 扩 展 名, 指 定 对 应 的 键 名( 如doc 文 件 对 应 的 键 为doc_auto_file) ---- 该 键 及 其 子 键 的 值, 将 定 义 该 类 型 的 文 件 的 类 型 说 明 和 操 作( 如 打 开、 编 辑) 说 明 ---- ( 2) 在 指 定 的 键 名 下, 建 立 子 键, 指 明 文 件 类 型 说 明 和 操 作 对 应 的 程 序 信 息 ---- 例 如, 我 们 可 以 为.DBF 文 件 建 立 文 件 关 联, 其 文 件 类 型 说 明 为 "xBase 数 据 表 ", 使 其 打 开(Open) 文 件 的 操 作 对 应 程 序C:\Program Files\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 }
function IsBDEInstalled : boolean;
var
registerTemp : TRegistry;
begin
registerTemp := TRegistry.Create;
//建立一个Registry实例
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE;
//设置根键值为HKEY_LOCAL_MACHINE
//查询Software\Borland\Database Engine
result := OpenKey('Software\Borland
\Database Engine',false); //善后处理
CloseKey;
Free;
end;
end;{调用IsBDEInstalled,检测系统中是否安装了BDE }
procedure TForm1.Button4Click(Sender: TObject);
begin
memo1.lines.add('开始');
if IsBDEInstalled then
memo1.lines.add('已安装了BDE')
else
memo1.lines.add('未安装BDE')
end;---- 应 用 之 四: 在 桌 面 建 立 程 序 的 快 捷 方 式 ---- 当 你 的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 }
function CreateShortcutOnDesktop
( strExeFileName, strParameters : string ) : boolean;
var
registerTemp : TRegistry;
strDesktopDirectory : widestring;
shelllinkTemp : IShellLink;
persistfileTemp : IPersistFile;
begin
registerTemp := TRegistry.Create;
//建立一个Registry实例
with registerTemp do
begin
RootKey:=HKEY_CURRENT_USER;
//设置根键值为HKEY_CURRENT_USER
//找到Software\MicroSoft\Windows CurrentVersion\Explorer\Shell Folders
if not OpenKey('Software\MicroSoft\Windows CurrentVersion\Explorer\Shell Folders',True) then
//写入自己程序的信息
begin
result := false;
exit;
end;
//读取项目Desktop的值,即Desktop的实际路径
strDesktopDirectory := ReadString('Desktop'); //善后处理
CloseKey;
Free;
end; //设置快捷方式的参数
shelllinkTemp := IShellLink( CreateComObject(CLSID_ShellLink));
with shelllinkTemp do
begin
SetPath( PChar( strExeFileName ) );
//设置程序文件全名
SetArguments( PChar( strParameters) );
//设置程序的命令行参数
//设置程序的工作目录
SetWorkingDirectory( Pchar
( ExtractFilePath( strExeFileName ) ) );
end; //构造快捷方式的文件名(.LNK)
strDesktopDirectory := strDesktopDirectory + '\' +
ExtractFileName( strExeFileName );
strDesktopDirectory := copy( strDesktopDirectory,
1, length( strDesktopDirectory ) -
length( ExtractFileExt( strExeFileName ) ) )
+ '.LNK';
//保存快捷方式的文件
persistfileTemp := shelllinkTemp as IPersistFile;
if S_OK = persistfileTemp.Save( PWChar
( strDesktopDirectory ) , false ) then
result := true //保存成功,返回True
else result := false;
end;{调用CreateShortcutOnDesktop,为Delphi在桌面上建立快捷方式 }
procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.lines.add('开始');
if CreateShortcutOnDesktop('C:\Program
Files\borland\delphi3\bin\delphi32.exe','%1') then
memo1.lines.add('成功')
else
memo1.lines.add('失败')
end;---- 上 面 几 个 应 用 只 是TRegistry 一 些 简 单 的 应 用, 有 了 这 些 知 识, 你 就 可 以 根 据 自 己 的 需 要 来 定 制 和 改 善Winodws 系 统 了。 ---- 以 上 程 序 在PWin98+Delphi3.0 下 调 试 和 通 过。
免 费 订 阅
实用技巧分类
Office应用
CAD
C、C++
数据库应用
Delphi
Internet应用
Java
Notes应用
操作系统应用
PowerBuilder
VB
Visual Foxpro
其他类
上周 排行榜
如 何 投 稿 ? 在日常的工作生活中,我们对计算机软硬件技术的应用开发肯定有许多的心得体会,拿来和众人分享:让别人得到他们想要的,使自己找到苦苦寻觅的;小的点点滴滴,大的工程系统,这里都需要。投稿 的关键在“技巧”二字,知他人所不知,这样的稿件本栏最最欢迎! 大家公认的 好文章自然会有好的奖励。希望每个人在这里都有所收获...
中国惠普
3Com中国
Motorola中国
CA中国
Cabletron
Sony在中国
西门子WinCC
爱普生中国
中国建设银行
德州仪器(TI)
问博医药
--------------------------------------------------------------------------------
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\RunOnce',
True)
then Reg.WriteString('MyApp','"' + ParamStr(0) + '"');
finally
Reg.CloseKey;
Reg.Free;
inherited;
end;
end;