最近做一个程序,需要读取HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下的所有键值,结果却不行,代码如下
var Reg: TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey = HKEY_LOCAL_MACHINE;
if Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',false) then begin
Caption := Reg.ReadString('APoint');
// Reg.GetValues(....) //失败!!!
//这里就读不到了,GetLastError返回5,权限不足!
end;
end;
后来网上反复查找,大多人说要提升UAC权限,还给出了一个.Res文件,结果用上这个文件还是不行,最后实在没辙,瞎看了一下,发现TRegistry的构造函数还有参数呢, 试一下:
Reg := TRegistry.Create(KEY_WRITE OR KEY_READ or KEY_WOW64_64KEY);
测试,OK!
所有问题解决!!