如何在Delphi中使用TRegistry读取注册表值?

Mar*_*uis -1 delphi registry delphi-12-athens

我正在尝试使用该类TRegistry读取 Windows 中的注册表值。

有人给我发送了一个如何使用它的示例,但代码不起作用。

uses Windows, Registry;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  Registry: TRegistry;
  ProductName: string;
begin
  Registry := TRegistry.Create(KEY_READ); // or KEY_WRITE if you want to modify the value
  try
    Registry.RootKey := HKEY_LOCAL_MACHINE;
    ProductName := Registry.GetValue('SOFTWARE\Microsoft\Windows NT\CurrentVersion', 'ProductName', '');
    ShowMessage('The product name is: ' + ProductName);
  finally
    Registry.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

这不是找GetValue。所以也许这不是TRegistry工作方式,或者它的工作方式在新版本的 Delphi 中已经改变了。我不确定,而且 Embarcadero docwiki 已关闭,所以我也无法在那里检查。

怎样TRegistry运作?如何使用它从注册表中读取值?

Dav*_*age 6

TRegistry 上没有 GetValue 方法,因此他们发送给您的代码是错误的,或者他们使用了未提供的帮助程序类。一种方法是这样做:

procedure TForm1.Button1Click(Sender: TObject);
var
  Registry: TRegistry;
  ProductName: string;
begin
  Registry := TRegistry.Create(KEY_READ); // or KEY_WRITE if you want to modify the value
  try
    Registry.RootKey := HKEY_LOCAL_MACHINE;
    ProductName := '';
    if Registry.OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion', False) then
    try
      ProductName := Registry.ReadString('ProductName');
    finally
      Registry.CloseKey;
    end;
    ShowMessage('The product name is: ' + ProductName);
  finally
    Registry.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)