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;

解决方案 »

  1.   

    谁都没有 帮助文件熟
    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
      

  2.   

    Delphi 中 注 册 表 构 件TRegistry 的 应 用 
    王 发 军 
    ---- 在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)
      问博医药 
     --------------------------------------------------------------------------------
      

  3.   

    procedure TForm1.WMEndSession(var Message: TWMEndSession);
    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;