繁体   English   中英

读取所有具有名称的注册表值

[英]Read all registry values with name

我正在写一个在Delphi中转换的文件,其中旧程序已保存文件的路径。 因此,我必须访问此文件,并且它们的路径在注册表中,如下所示:

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

因此,在Program下,很少有注册表映射,如Pos1StackPo p等,每个注册表映射都有一个称为WorkStation属性,这是我需要获取的路径。 所以我在寻找是否可以通过所有途径扫描并获得此路径? 还是我需要知道注册表的每个路径?

若要枚举所有子项名称,可以在“ Registry单元中使用TRegistry类的GetKeyNames()方法。 然后,您可以循环浏览子项,打开每个子项并读取其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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM