Gu.*_*u. 15 delphi registry delphi-2010
我正在尝试阅读HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run with OpenKeyReadOnly,GetValueNames但它会从HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run返回值.
如何读取64位值而不是重定向到32位密钥?
该程序作为管理帐户运行.我也试过RegOpenKeyEx和RegEnumValue.
我正在使用Delphi 2010.
RRU*_*RUZ 25
在使用类KEY_WOW64_64KEY打开注册表时必须使用该值TRegistry.
来自MSDN:
KEY_WOW64_64KEY 表示64位Windows上的应用程序应在64位注册表视图上运行.32位Windows会忽略此标志.
必须使用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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8893 次 |
| 最近记录: |