用Delphi在Registry中写dword值

时间:2017-01-27 15:20:32

标签: delphi registry dword

我的程序有一个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文件(或手动)成功操作时,注册表项如下所示:

good key

但是由于我的Delphi Code不成功,关键变为如下:

bad key

区别在于括号中的数字,但这是注册表自动引入的内容。

1 个答案:

答案 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;