function RegFinder(RootKey:HKEY;KeyToOpen:String):integer;
var
  i,j: integer;
  Reg: TRegistry;
  SubKeyList: TStringlist;                    //用于存放子键的列表;
begin
  Reg:= TRegistry.Create ;
  try
    Reg.RootKey := RootKey;
    if Reg.OpenKeyReadOnly(KeyToOpen) then begin
       if Reg.HasSubKeys then begin            //如果有子键;
          SubKeyList:= TStringlist.Create ;
          try
            Reg.GetKeyNames(SubKeyList);       //取得子键列表;
            for i:=0 to SubKeyList.Count - 1 do begin
               RegFinder(RootKey,KeyToOpen + '\' + SubKeyList.Strings[i]);  //递归调用本函数;
            end;
          finally SubKeyList.Free ; end;
       end ;
    end;
  finally  Reg.Free ; Result:= 1 ; end;
end;
这段代码只是递归暂没做任何事, 以HKEY_LOCAL_MACHINE为参数运行有内存冲突,换成除HKEY_LOCAL_MACHINE以外的任何一个根键就没有问题,这是为什么?调用代码是 if RegFinder(HKEY_LOCAL_MACHINE,'') then ...

解决方案 »

  1.   

    是不是因為HKEY_LOCAL_MACHINE這個裡面的東東太多了,遞歸層次太多了?
      

  2.   

    恐怕不是递归层次的问题,其它根键层次也很多。经发复测试,是HKEY_LOCAL_MACHINE里的SYSTEM子键不能遍历,该根键其它子键都能遍历。如果是注册表权限的问题,已经是用只读方式打开的呀?
      

  3.   

    jinxi() 提醒的很對,在Window系統中,讀取注冊表,是需要有足夠的權限的我想應該是這個問題了
      

  4.   

    已经是adminstrator帐号登录,权限还不够么?