给你一段刚刚写的代码,修改一下应该可以满足你的要求。用递归方法。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;
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;
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;