我的程序有一个TWebBrowser,用户可以在其中打开各种本地文档。为了避免这种情况,例如在Word中而不是在TWebBrowser中打开Word文档(也就是说,在Internet Explorer中),我通过执行带有此指令的.reg文件在注册表中成功使用了修复:
[HKEY_LOCAL_MACHINE \ SOFTWARE \类\ 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 Code不成功,关键变为如下:
区别在于括号中的数字,但这是注册表自动引入的内容。
答案 0 :(得分:0)
.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;