gpt4 book ai didi

delphi - 32位程序如何读取 "real"64位版本的注册表?

转载 作者:行者123 更新时间:2023-12-03 14:35:53 24 4
gpt4 key购买 nike

我正在尝试使用 OpenKeyReadOnlyGetValueNames 读取 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run,但它正在返回来自 HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run 的值。

如何读取 64 位值而不是从重定向到 32 位 key ?

该程序作为管理帐户运行。我还尝试了 RegOpenKeyExRegEnumValue

我使用的是 Delphi 2010。

最佳答案

您必须使用KEY_WOW64_64KEY使用 TRegistry 打开注册表时的值类。

来自 MSDN:

KEY_WOW64_64KEY Indicates that an application on 64-bit Windows should operate on the 64-bit registry view. This flag is ignored by 32-bit Windows.

This flag must be combined using the OR operator with the other flags in this table that either query or access registry values.

尝试这个示例应用程序。

{$APPTYPE CONSOLE}

uses
Windows,
Classes,
registry,
SysUtils;


procedure ReadRegistry;
var
Registry: TRegistry;
List : TStrings;
begin
Registry := TRegistry.Create(KEY_WRITE OR KEY_WOW64_64KEY);
//Registry := TRegistry.Create(KEY_READ OR KEY_WOW64_64KEY);
List := TStringList.Create;
try
Registry.RootKey := HKEY_LOCAL_MACHINE;
if Registry.OpenKeyReadOnly('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run') then
begin
Registry.GetValueNames(List);
Writeln(List.Text);
end;
Registry.CloseKey;
finally
Registry.Free;
List.Free;
end;
end;

begin
try
ReadRegistry();
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
Readln;
end.

关于delphi - 32位程序如何读取 "real"64位版本的注册表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5493303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com