繁体   English   中英

用 Delphi 在注册表中写入 dword 值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM