[英]Write dword value in Registry with Delphi
我的程序有一个 TWebBrowser,用户可以在其中打开各种本地文档。 为了避免例如在 Word 中而不是在 TWebBrowser 中打开 Word 文档(也就是说,在 Internet Explorer 中),我成功地使用了注册表中的修复程序,通过使用以下指令执行 .reg 文件:
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\Word.Document.12] "BrowserFlags"=dword:80000024
我试图在 Delphi 程序本身中引入该指令,使用以下代码:
procedure RegOpenExplorer;
var
reg: TRegistry;
begin
reg:= TRegistry.Create;
try
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey('SOFTWARE\Classes\Word.Document.12\', true);
reg.WriteInteger('BrowserFlags',80000024);
reg.CloseKey;
finally
reg.Free;
end;
end;
它不起作用,实际上效果是取消修复。
使用 .reg 文件(或手动)成功操作后,注册表项如下所示:
但是我的Delphi代码不成功,关键变成了如下:
不同之处在于括号中的数字,但这是登记处自动引入的。
.reg
文件中的数值被编码为十六进制。 由于您将整数文字传递给WriteInteger()
,因此您需要在它前面加上$
前缀,以使编译器将其解释为十六进制:
reg.WriteInteger('BrowserFlags', $80000024);
话虽如此,请注意您正在写入HKEY_LOCAL_MACHINE
,更重要的是您正在使用KEY_ALL_ACCESS
访问权限( TRegistry
使用的默认访问权限)打开密钥。 这将要求您以管理员身份运行您的应用程序(如果还没有)。 您应该将TRegistry.Access
属性设置为KEY_SET_VALUE
,甚至可能改为写入HKEY_CURRENT_USER
。
procedure RegOpenExplorer;
var
reg: TRegistry;
begin
reg := TRegistry.Create(KEY_SET_VALUE);
try
reg.RootKey := HKEY_LOCAL_MACHINE; // or HKEY_CURRENT_USER
if reg.OpenKey('SOFTWARE\Classes\Word.Document.12\', true) then
try
reg.WriteInteger('BrowserFlags', $80000024);
finally
reg.CloseKey;
end;
finally
reg.Free;
end;
end;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.