我正在尝试使用OpenKeyReadOnly
和GetValueNames
读取 HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run ,但它正在从 HKLM返回值\ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Run 。
如何读取64位值而不是重定向到32位密钥?
该程序作为管理帐户运行。我还尝试了RegOpenKeyEx
和RegEnumValue
。
我正在使用Delphi 2010。
答案 0 :(得分:25)
使用KEY_WOW64_64KEY
类打开注册表时,必须使用TRegistry
值。
:
KEY_WOW64_64KEY 表示一个 应用程序在64位Windows上应该 在64位注册表视图上运行。 该标志被32位忽略 视窗。
此标志必须使用 OR运算符与其他标志 此表可以查询或访问 注册表值。
试试这个示例应用。
{$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.