CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  Windows SDK/API

用API操作注册表?

楼主TurtleRock(wu)2005-12-21 23:27:02 在 Delphi / Windows SDK/API 提问

不用TRegistry,如何用API枚举某键下面的subkey   和value?  
  谁有没有用API操作注册表的完整的API例子(包括枚举,读取各种类型的值)?  
  找了很久,没找到,哪们知道,指教一下,谢!  
  问题点数:20、回复次数:6Top

1 楼phoex(后羿)回复于 2005-12-21 23:33:58 得分 0

你可以去看一下TRegistry的实现呀!Top

2 楼TurtleRock(wu)回复于 2005-12-22 00:00:25 得分 0

多谢   phoex(后羿)兄指教。  
  我看过TRegistry,但是它太对象化了,每个东西都对象化,因此显得有点过于繁杂  
  自己一个一个去找,再写,有点麻烦。  
  想直接找个大家写好了来用用。Top

3 楼liangqingzhi(老之)回复于 2005-12-22 02:57:47 得分 10

function   RegEnum(RootKey:HKEY;Name:String;var   ResultList:String;const   DoKeys:Boolean):boolean;  
  var               //枚举  
      i:integer;  
      iRes:integer;  
      s:String;  
      hTemp:HKEY;  
      Buf:Pointer;  
      BufSize:Cardinal;  
  begin  
      Result:=False;  
      ResultList:='';  
      if   RegOpenKeyEx(RootKey,PChar(Name),0,KEY_READ,hTemp)=ERROR_SUCCESS   then  
            begin  
                Result:=True;  
                BufSize:=1024;  
                GetMem(buf,   BufSize);  
                i:=0;  
            iRes   :=   ERROR_SUCCESS;  
            while   iRes=ERROR_SUCCESS   do  
            begin  
            BufSize:=1024;  
            if   DoKeys   then  
            iRes:=RegEnumKeyEx(hTemp,i,buf,BufSize,nil,nil,nil,nil)  
            else  
            iRes:=RegEnumValue(hTemp,i,buf,BufSize,nil,nil,nil,nil);  
            if   iRes=ERROR_SUCCESS   then  
            begin  
            SetLength(s,BufSize);  
            Move(buf^,s[1],BufSize);  
            if   ResultList=''   then  
            ResultList:=s  
            else  
            ResultList:=Concat(ResultList,#13#10,s);  
            inc(i);  
            end;  
            end;  
            FreeMem(buf);  
            RegCloseKey(hTemp);  
            end;  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);   //读取键值  
  var   hKey1:HKEY;  
          size:Cardinal;  
          value:array[0..255]of   char;  
  begin  
      RegOpenKeyEx(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows\CurrentVersion',0,KEY_READ,hKey1);  
      RegQueryValueEx(hKey1,'CommonFilesDir',nil,nil,@value,@size);  
      ShowMessage(value);  
      RegCloseKey(hKey1);  
  end;  
   
  procedure   TForm1.Button2Click(Sender:   TObject);  
  var   s:string;  
  begin  
      RegEnum(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows\CurrentVersion',s,False);  
      ShowMessage(s);  
  end;Top

4 楼nmgyjw(袁继武)回复于 2005-12-22 08:29:46 得分 0

可以查一下具体的帮助文件呀!Top

5 楼Kingron(单身走我路……)回复于 2005-12-22 09:27:40 得分 10

function   RegGetValueNames(const   RootKey:   HKEY;   const   SubKey:   string;   Names:   TStrings):   Boolean;  
  {  
      返回注册表中指定主键下的所有的键名列表  
  }  
  var  
      RegKey:   HKEY;  
      I:   DWORD;  
      Size:   DWORD;  
      NumSubKeys:   DWORD;  
      NumSubValues:   DWORD;  
      MaxSubValueLen:   DWORD;  
      ValueName:   string;  
  begin  
      Result   :=   False;  
      if   RegOpenKeyEx(RootKey,   PChar(SubKey),   0,   KEY_READ,   RegKey)   =   ERROR_SUCCESS   then  
      begin  
          if   RegQueryInfoKey(RegKey,   nil,   nil,   nil,   @NumSubKeys,   nil,   nil,   @NumSubValues,   @MaxSubValueLen,   nil,   nil,   nil)   =   ERROR_SUCCESS   then  
          begin  
              SetLength(ValueName,   MaxSubValueLen   +   1);  
              if   NumSubValues   <>   0   then  
                  for   I   :=   0   to   NumSubValues   -   1   do  
                  begin  
                      Size   :=   MaxSubValueLen   +   1;  
                      RegEnumValue(RegKey,   I,   PChar(ValueName),   Size,   nil,   nil,   nil,   nil);  
                      Names.Add(PChar(ValueName));  
                  end;  
              Result   :=   True;  
          end;  
          RegCloseKey(RegKey);  
      end;  
  end;  
   
  function   RegGetKeyNames(const   RootKey:   HKEY;   const   SubKey:   string;   Names:   TStrings):   Boolean;  
  {  
      返回注册表中指定主键下的所有子键的名称列表  
  }  
  var  
      RegKey:   HKEY;  
      I:   DWORD;  
      Size:   DWORD;  
      NumSubKeys:   DWORD;  
      MaxSubKeyLen:   DWORD;  
      KeyName:   string;  
  begin  
      Result   :=   False;  
      if   RegOpenKeyEx(RootKey,   PChar(SubKey),   0,   KEY_READ,   RegKey)   =   ERROR_SUCCESS   then  
      begin  
          if   RegQueryInfoKey(RegKey,   nil,   nil,   nil,   @NumSubKeys,   @MaxSubKeyLen,   nil,   nil,   nil,   nil,   nil,   nil)   =   ERROR_SUCCESS   then  
          begin  
              SetLength(KeyName,   MaxSubKeyLen   +   1);  
              if   NumSubKeys   <>   0   then  
                  for   I   :=   0   to   NumSubKeys   -   1   do  
                  begin  
                      Size   :=   MaxSubKeyLen   +   1;  
                      RegEnumKeyEx(RegKey,   I,   PChar(KeyName),   Size,   nil,   nil,   nil,   nil);  
                      Names.Add(PChar(KeyName));  
                  end;  
              Result   :=   True;  
          end;  
          RegCloseKey(RegKey);  
      end  
  end;Top

6 楼TurtleRock(wu)回复于 2005-12-22 13:11:22 得分 0

谢谢各位,结贴Top

相关问题

  • VB中用API操作注册表
  • 用API操作注册表的问题!!
  • 请教在Delphi中用API操作注册表问题
  • API问题(操作注册表)
  • 一个关于用API操作注册表的小问题。高手指教。
  • 怎么用delphi操作注册表???
  • 如何用delphi操作注册表
  • 怎样用JAVA操作注册表?
  • 如何用C#操作注册表?
  • 操作注册表?

关键词

  • api
  • nil
  • numsubkeys
  • regkey
  • 注册表
  • resultlist
  • maxsubvaluelen
  • maxsubkeylen
  • numsubvalues
  • htemp

得分解答快速导航

  • 帖主:TurtleRock
  • liangqingzhi
  • Kingron

相关链接

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

广告也精彩

反馈

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