给你一段刚刚写的代码,修改一下应该可以满足你的要求。用递归方法。procedure TForm1.Button1Click(Sender: TObject);
var
    strs:TStringList;
    reg:TRegistry;
    i:integer;
begin
    strs:=TStringList.Create;
    reg:=TRegistry.Create;
/////////先处理主键HKEY_CLASSES_ROOT;
    reg.RootKey:=HKEY_CLASSES_ROOT;
    reg.OpenKey('HKEY_CLASSES_ROOT',false);
    reg.GetKeyNames(strs);
    for i:=0 to strs.Count-1 do
    begin
        if strs[i]='指定的键名' then
        begin
            ///找到指定的主键,处理
        end;
        FindSubKeyNames(HKEY_CLASSES_ROOT,strs[i]);/////再继续寻找
    end;
    reg.CloseKey;{('HKEY_CLASSES_ROOT','HKEY_CURRENT_USER','HKEY_LOCAL_MACHINE','HKEY_USERS','HKEY_CURRENT_CONFIG','HKEY_DYN_DATA')}
/////////处理其他主键HKEY_CURRENT_USER等等,共6个,代码基本相同;
    reg.RootKey:=HKEY_CURRENT_USER;
    reg.OpenKey('HKEY_CURRENT_USER',false);
    reg.GetKeyNames(strs);
    for i:=0 to strs.Count-1 do
    begin
        if strs[i]='指定的键名' then
        begin
            ///找到指定的主键,处理
        end;
        FindSubKeyNames(HKEY_CURRENT_USER,strs[i]);/////再继续寻找
    end;
    reg.CloseKey;
///////////////////////
    reg.Free;
    strs.Free;
end;procedure FindSubKeyNames(rkTemp:HKEY;str_in:string);
var
    strs:TStringList;
    reg:TRegistry;
    i:integer;
begin
    strs:=TStringList.Create;
    reg:=TRegistry.Create;
    reg.RootKey:=rkTemp;
    if reg.OpenKey(str_in,false) then
    begin
        reg.GetKeyNames(strs);
        for i:=0 to strs.Count-1 do
        begin
            if strs[i]='指定的键名' then
            begin
                ///找到指定的主键,处理
            end;
            FindSubKeyNames(rkTemp,strs[i]);/////再继续寻找
        end;
    end;
    reg.CloseKey;
    reg.Free;
    strs.Free;
end;

解决方案 »

  1.   

    刚才的程序有点问题,又改了一下,调试通过,可以试试看。procedure TForm1.Button1Click(Sender: TObject);
    var
        strs:TStringList;
        reg:TRegistry;
        i:integer;
    begin
        strs:=TStringList.Create;
        reg:=TRegistry.Create;
    /////////先处理主键HKEY_CLASSES_ROOT;
        reg.RootKey:=HKEY_CLASSES_ROOT;
        reg.OpenKey('',false);
        reg.GetKeyNames(strs);
        reg.CloseKey;
        for i:=0 to strs.Count-1 do
        begin
            if strs[i]='指定的键名' then
            begin
                ///找到指定的主键,处理
            end;
            FindSubKeyNames(HKEY_CLASSES_ROOT,strs[i]);/////再继续寻找
        end;{('HKEY_CLASSES_ROOT','HKEY_CURRENT_USER','HKEY_LOCAL_MACHINE','HKEY_USERS','HKEY_CURRENT_CONFIG','HKEY_DYN_DATA')}
    /////////处理其他主键HKEY_CURRENT_USER等等,共6个,代码基本相同;
        reg.RootKey:=HKEY_CURRENT_USER;
        reg.OpenKey('',false);
        reg.GetKeyNames(strs);
        reg.CloseKey;
        for i:=0 to strs.Count-1 do
        begin
            if strs[i]='指定的键名' then
            begin
                ///找到指定的主键,处理
            end;
            FindSubKeyNames(HKEY_CURRENT_USER,'\'+strs[i]);/////再继续寻找
        end;
    ///////////////////////
        reg.Free;
        strs.Free;
    end;procedure FindSubKeyNames(rkTemp:HKEY;str_in:string);
    var
        strs:TStringList;
        reg:TRegistry;
        i:integer;
    begin
        strs:=TStringList.Create;
        reg:=TRegistry.Create;
        reg.RootKey:=rkTemp;
        if reg.OpenKey(str_in,false) then
        begin
            reg.GetKeyNames(strs);
            reg.CloseKey;
            for i:=0 to strs.Count-1 do
            begin
                if strs[i]='指定的键名' then
                begin
                    Form1.Memo1.Lines.Add(str_in);
                    ///找到指定的主键,处理
                end;
                FindSubKeyNames(rkTemp,str_in+'\'+strs[i]);/////再继续寻找
            end;
        end;
        reg.Free;
        strs.Free;
    end;
      

  2.   

    妈的,CSDN改版了,我都不知道怎么给分!告诉我!