使用名称读取所有注册表值

时间:2016-03-16 09:43:32

标签: delphi pascal

我正在编写一个用Delphi编译的程序,旧程序保存了文件路径。所以我必须得到这些文件,他们的路径在注册表中,如下所示:

HKEY_LOCAL_MACHINE -> SOFTWARE-> Company->Program-> Pos1, Stack, Pop

因此,根据计划,很少有注册表地图,例如Pos1StackPo p等,并且每个注册表地图都有一个名为WorkStation的属性,这是我需要的路径要得到。所以我在寻找是否有办法扫描所有的东西并获得这条路径?或者我是否需要了解注册表的每条路径?

1 个答案:

答案 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;