CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

注册表问题

楼主hanshu(瀚叔)2003-02-01 15:55:21 在 Delphi / VCL组件开发及应用 提问

怎样用API函数导出注册表?????? 问题点数:20、回复次数:3Top

1 楼hanshu(瀚叔)回复于 2003-02-01 21:44:59 得分 0

能到处就行了,有方法吗?Top

2 楼chatop(星点)回复于 2003-02-01 22:42:59 得分 20

如何把注册表转换成一个.reg文件?  
  请参考下面的单元:  
  用法:  
      ExportRegistryToFile(HKEY_CURRENT_USER,'SoftWare\Borland','C:\aaaa.reg');  
  ///FileName:RegExport.pas  
  unit   RegExport;  
   
  interface  
  uses  
      windows,   registry,   Classes,   sysutils;  
   
  procedure   ExportRegistryToFile(const   Root:   HKEY;   const   Key:   string;   const   FileName:   TFileName);  
   
  implementation  
   
  function   DBLBackSlash(T:   string):   string;  
  ///本函数用来把一个'\'变成两个'\\',符合REG文件格式  
  var  
      K                                   :   Longint;  
  begin  
      Result   :=   T;  
      for   K   :=   Length(T)   downto   1   do  
          if   Result[k]   =   '\'   then   insert('\',   Result,   K);  
  end;  
   
  {$I-}  
   
  procedure   ExportRegistryToFile(const   Root:   HKEY;   const   Key:   string;   const   FileName:   TFileName);  
  var  
      Reg                               :   TRegistry;  
      F                                   :   TextFile;  
      p                                   :   PChar;  
      FKey                             :   string;  
   
      procedure   ProcessBranch(R:   string);   ///递归处理子键  
      var  
          Values,   Keys         :   TStringList;  
          i,   j,   k                   :   longint;  
          s,   t                         :   string;  
      begin  
          WriteLn(F);  
          case   Root   of  
              HKEY_CLASSES_ROOT:   s   :=   'HKEY_CLASSES_ROOT';  
              HKEY_CURRENT_USER:   s   :=   'HKEY_CURRENT_USER';  
              HKEY_LOCAL_MACHINE:   s   :=   'HKEY_LOCAL_MACHINE';  
              HKEY_USERS:   s   :=   'HKEY_USERS';  
              HKEY_PERFORMANCE_DATA:   s   :=   'HKEY_PERFORMANCE_DATA';  
              HKEY_CURRENT_CONFIG:   s   :=   'HKEY_CURRENT_CONFIG';  
              HKEY_DYN_DATA:   s   :=   'HKEY_DYN_DATA';  
          end;  
          WriteLn(F,   '['   +   s   +   '\'   +   R   +   ']');   ///like   [HKEY_CURRENT_USER\....\....\]  
          Reg.CloseKey;  
          Reg.OpenKey(R,   False);  
          Values   :=   TStringList.Create;  
          Keys   :=   TStringList.Create;  
          Reg.GetValueNames(Values);  
          Reg.GetKeyNames(Keys);  
          for   i   :=   0   to   Values.Count   -   1   do  
          begin  
              s   :=   Values.Strings[i];  
              t   :=   s;  
              if   s   =   ''   then   s   :=   '@'   else   s   :=   '"'   +   s   +   '"';  
              Write(F,   DBLBackSlash(s)   +   '=');  
              case   Reg.GetDataType(t)   of  
                  rdString,   rdExpandString:   Writeln(F,   '"'   +   DBLBackSlash(Reg.ReadString(t))   +   '"');  
                  rdInteger:   Writeln(F,   'dword:'   +   IntToHex(Reg.ReadInteger(t),   8));  
                  rdBinary:   begin  
                          Write(F,   'hex:');  
                          j   :=   Reg.GetDataSize(t);  
                          GetMem(p,   j);  
                          Reg.ReadBinaryData(t,   p^,   j);  
                          for   k   :=   0   to   j   -   1   do  
                          begin  
                              Write(F,   IntToHex(byte(p[k]),   2));  
                              if   k   <>   j   -   1   then  
                              begin  
                                  Write(F,   ',');  
                                  if   (K   >   0)   and   ((K   mod   25)   =   0)   then  
                                      WriteLn(F,   '\');  
                              end;   ///End   if   K<>j-1  
                          end;   ///For  
                          FreeMem(p,   j);  
                          WriteLn(F);  
                      end;  
              else   ///case   else  
                  WriteLn(F,   '""');   ///数据非法!  
              end;   ///   End   Case  
          end;   ///end   For  
          Reg.CloseKey;  
          Values.Free;  
          for   i   :=   0   to   Keys.Count   -   1   do  
              if   R   <>   ''   then  
                  ProcessBranch(R   +   '\'   +   Keys.Strings[i])  
              else  
                  ProcessBranch(Keys[i]);  
          Keys.Free;  
      end;  
   
  begin  
      FKey   :=   Key;  
      if   FKey   <>   ''   then  
          if   Key[Length(FKey)]   =   '\'   then  
              SetLength(FKey,   Length(FKey)   -   1);  
      AssignFile(F,   FileName);  
      ReWrite(F);  
      if   IOResult   <>   0   then   exit;  
      WriteLn(F,   'REGEDIT4');  
      Reg   :=   TRegistry.Create;  
      try  
          Reg.RootKey   :=   Root;  
          ProcessBranch(FKey);  
      finally  
          Reg.Free;  
          Close(F);  
      end;  
  end;  
  {$I+}  
   
  end.  
  Top

3 楼anaikh(huangjing)回复于 2003-02-02 07:43:08 得分 0

up!Top

相关问题

  • windows注册表
  • 注册表中……
  • 注册表(Registry)
  • 注册表
  • 读注册表
  • 注册表?
  • 注册表
  • 注册表问题
  • 注册表的API
  • 注册表问题?

关键词

  • root
  • processbranch
  • fkey
  • 注册表
  • exportregistrytofile
  • reg
  • writeln
  • hkey
  • key
  • filename

得分解答快速导航

  • 帖主:hanshu
  • chatop

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo