我正在编写一个用Delphi编译的程序,旧程序保存了文件路径。所以我必须得到这些文件,他们的路径在注册表中,如下所示:
HKEY_LOCAL_MACHINE -> SOFTWARE-> Company->Program-> Pos1, Stack, Pop
因此,根据计划,很少有注册表地图,例如Pos1
,Stack
,Po
p等,并且每个注册表地图都有一个名为WorkStation
的属性,这是我需要的路径要得到。所以我在寻找是否有办法扫描所有的东西并获得这条路径?或者我是否需要了解注册表的每条路径?
答案 0 :(得分:5)
要枚举所有子键名称,您可以使用GetKeyNames()
单元中TRegistry
类的Registry
方法。然后,您可以遍历子项,打开每个子项并读取其WorkStation
值。
uses
...,
Registry,
Classes;
var
registry : TRegistry;
subKeysNames : TStringList;
WorkStation : String;
i : Integer;
begin
registry := TRegistry.Create;
try
subKeysNames := TStringList.Create;
try
registry.RootKey := HKEY_LOCAL_MACHINE;
if registry.OpenKeyReadOnly('\Software\Company\Program') then
begin
registry.GetKeyNames(subKeysNames);
CloseKey;
end;
for i := 0 to subKeysNames.Count - 1 do
begin
if registry.OpenKeyReadOnly('\Software\Company\Program\' + subKeysNames[i]) then
begin
WorkStation := registry.ReadString('WorkStation');
registry.CloseKey;
if WorkStation <> '' then
begin
// use WorkStation as needed...
end;
end;
end;
finally
subKeysNames.Free;
end;
finally
registry.Free;
end;
end;