怎样得到注册表当前键下所有的子键。(这个问题好像提的比较少!) 如:'Software/Microsoft/',是得到‘Microsoft’键下所有的子键,不是单纯用GetKeyNames只得到"Microsoft"下面的键。我知道用递归的方法,但是程序老是出错。请各位帮帮忙。最好能把这种算法以程序的形式表达出来。不甚感激! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 uses Registry;function ScanRegistry(mRootKey: HKEY; mKey: string; mStrings: TStrings): Boolean; overload;var vRegistry: TRegistry; procedure pScanRegistry(mKey: string); var vKeyNames: TStringList; I: Integer; begin vKeyNames := TStringList.Create; try vRegistry.CloseKey; vRegistry.RootKey := mRootKey; if not vRegistry.OpenKey(mKey, False) then Exit; mStrings.Add(mKey); vRegistry.GetKeyNames(vKeyNames); for I := 0 to vKeyNames.Count - 1 do pScanRegistry(mKey + '\' + vKeyNames[I]); finally vKeyNames.Free; end; end; { pScanRegistry }begin Result := False; if not Assigned(mStrings) then Exit; vRegistry := TRegistry.Create; mStrings.Clear; mStrings.BeginUpdate; try pScanRegistry(mKey); finally vRegistry.Free; mStrings.EndUpdate; end; Result := True;end; { ScanRegistry }function ScanRegistry(mRootKey: HKEY; mKey: string; mTreeView: TTreeView): Boolean; overload;var vRegistry: TRegistry; procedure pScanRegistry(mTreeNode: TTreeNode; mKey: string); var vKeyNames: TStringList; vTreeNode: TTreeNode; I: Integer; begin vKeyNames := TStringList.Create; try vRegistry.CloseKey; vRegistry.RootKey := mRootKey; if not vRegistry.OpenKey(mKey, False) then Exit; vRegistry.GetKeyNames(vKeyNames); for I := 0 to vKeyNames.Count - 1 do begin vTreeNode := mTreeView.Items.AddChild(mTreeNode, vKeyNames[I]); pScanRegistry(vTreeNode, mKey + '\' + vKeyNames[I]); end; finally vKeyNames.Free; end; end; { pScanRegistry }begin Result := False; if not Assigned(mTreeView) then Exit; mTreeView.Items.Clear; vRegistry := TRegistry.Create; mTreeView.Items.BeginUpdate; try pScanRegistry(mTreeView.Items.AddChild(mTreeView.TopItem, mKey), mKey); finally vRegistry.Free; mTreeView.Items.EndUpdate; end; Result := True;end; { ScanRegistry }procedure TForm1.Button1Click(Sender: TObject);begin ScanRegistry(HKEY_CURRENT_USER, 'Software\Microsoft', Memo1.Lines); ScanRegistry(HKEY_CURRENT_USER, 'Software\Microsoft', TreeView1);end; 谢谢你:zswang(伴水清清)(专家门诊清洁工) 直接用TRegistry对象的GetKeyNames方法不是更加容易吗 谢谢 zswang(伴水清清)(专家门诊清洁工) 的回答!也帮助了所有有这方面需求的朋友!:) TrewView控件的HideSelection属性没效果? 同样的程序,在不同电脑上面显示的结果不一样,TDBGridEh,TNumericField,DisplayFormat问题 做了个截屏后比较的程序,运行一段时间后就出现错误。 关于ACCESS日期时间类型字段的查询 有关MonthCalendar---在线等待,立马给分!!! MIDAS问题 求助!关于动态数组!在线等待! delphi MAC地址怎么转换成字符串 关于字符‘#’的问题? 怎么在delphi程序中建立project? 系统托盘的问题 用intraweb如何把几个窗体全并为一个窗体
var
vRegistry: TRegistry; procedure pScanRegistry(mKey: string);
var
vKeyNames: TStringList;
I: Integer;
begin
vKeyNames := TStringList.Create;
try
vRegistry.CloseKey;
vRegistry.RootKey := mRootKey;
if not vRegistry.OpenKey(mKey, False) then Exit;
mStrings.Add(mKey);
vRegistry.GetKeyNames(vKeyNames);
for I := 0 to vKeyNames.Count - 1 do
pScanRegistry(mKey + '\' + vKeyNames[I]);
finally
vKeyNames.Free;
end;
end; { pScanRegistry }begin
Result := False;
if not Assigned(mStrings) then Exit;
vRegistry := TRegistry.Create;
mStrings.Clear;
mStrings.BeginUpdate;
try
pScanRegistry(mKey);
finally
vRegistry.Free;
mStrings.EndUpdate;
end;
Result := True;
end; { ScanRegistry }function ScanRegistry(mRootKey: HKEY; mKey: string; mTreeView: TTreeView): Boolean; overload;
var
vRegistry: TRegistry; procedure pScanRegistry(mTreeNode: TTreeNode; mKey: string);
var
vKeyNames: TStringList;
vTreeNode: TTreeNode;
I: Integer;
begin
vKeyNames := TStringList.Create;
try
vRegistry.CloseKey;
vRegistry.RootKey := mRootKey;
if not vRegistry.OpenKey(mKey, False) then Exit;
vRegistry.GetKeyNames(vKeyNames);
for I := 0 to vKeyNames.Count - 1 do begin
vTreeNode := mTreeView.Items.AddChild(mTreeNode, vKeyNames[I]);
pScanRegistry(vTreeNode, mKey + '\' + vKeyNames[I]);
end;
finally
vKeyNames.Free;
end;
end; { pScanRegistry }begin
Result := False;
if not Assigned(mTreeView) then Exit;
mTreeView.Items.Clear;
vRegistry := TRegistry.Create;
mTreeView.Items.BeginUpdate;
try
pScanRegistry(mTreeView.Items.AddChild(mTreeView.TopItem, mKey), mKey);
finally
vRegistry.Free;
mTreeView.Items.EndUpdate;
end;
Result := True;
end; { ScanRegistry }procedure TForm1.Button1Click(Sender: TObject);
begin
ScanRegistry(HKEY_CURRENT_USER, 'Software\Microsoft', Memo1.Lines);
ScanRegistry(HKEY_CURRENT_USER, 'Software\Microsoft', TreeView1);
end;
也帮助了所有有这方面需求的朋友!:)