加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何读取注册表项的默认值

发布时间:2020-12-15 09:40:45 所属栏目:大数据 来源:网络整理
导读:我正在使用一个Delphi XE2项目来处理注册表项.所以我定义了以下代码: procedure TMainForm.BitBtn01Click(Sender: TObject);var RegistryEntry: TRegistry;begin RegistryEntry := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY); RegistryEntry.RootKey:=
我正在使用一个Delphi XE2项目来处理注册表项.所以我定义了以下代码:

procedure TMainForm.BitBtn01Click(Sender: TObject);
var
  RegistryEntry: TRegistry;
begin
  RegistryEntry := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
  RegistryEntry.RootKey:= HKEY_LOCAL_MACHINE;
  if (not RegistryEntry.KeyExists('SoftwareMyCompanyNameMyName')) then
    begin
      RegistryEntry.Access:= KEY_WRITE or KEY_WOW64_64KEY;
      RegistryEntry.OpenKey('SoftwareMyCompanyNameMyName',True);
      RegistryEntry.WriteString('','MyFirstProject');
    end
  else
    begin
      Memo01.Lines.Add(RegistryEntry.ReadString('(Default)')); //Not Working
      Memo01.Lines.Add(RegistryEntry.ReadString('')); //Not Working
      Memo01.Lines.Add(RegistryEntry.ReadString('@')); //Not Working
    end;
  RegistryEntry.CloseKey();
  RegistryEntry.Free;
end;

我的要求是检查“MyName”的默认值并显示在Memo01中.但是什么都没有.所以我尝试了另外一种方法如下:

procedure TMainForm.BitBtn01Click(Sender: TObject);
var
  RegistryEntry: TRegistry;
  RegistryString: string;
begin
  RegistryEntry := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
  RegistryEntry.RootKey:= HKEY_LOCAL_MACHINE;
  if (not RegistryEntry.KeyExists('SoftwareMyCompanyNameMyName')) then
    begin
      RegistryEntry.Access:= KEY_WRITE or KEY_WOW64_64KEY;
      RegistryEntry.OpenKey('SoftwareMyCompanyNameMyName','MyFirstProject');
    end
  else
    begin
      RegistryString := RegistryEntry.ReadString('(Default)'); //Not Working
      RegistryString := RegistryEntry.ReadString(''); //Not Working
      RegistryString := RegistryEntry.ReadString('@'); //Not Working
      Memo01.Lines.Add(RegistryString);
    end;
  RegistryEntry.CloseKey();
  RegistryEntry.Free;
end;

但它也没有用.

解决方法

你的其他部分没有Openkey.

Const
  C_KEY='SoftwareMyCompanyNameMyName';
var
  RegistryEntry: TRegistry;
  RegistryString: string;
begin
  RegistryEntry := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
  try
    RegistryEntry.RootKey := HKEY_LOCAL_MACHINE;
    if (not RegistryEntry.KeyExists(C_KEY)) then
    begin
      RegistryEntry.Access := KEY_WRITE or KEY_WOW64_64KEY;
      if RegistryEntry.OpenKey(C_KEY,true) then
        RegistryEntry.WriteString('','MyFirstProject');
    end
    else
    begin
      RegistryEntry.Access := KEY_READ or KEY_WOW64_64KEY;
      if RegistryEntry.OpenKey(C_KEY,false) then
      begin
        Memo01.Lines.Add(RegistryEntry.ReadString(''));
      end;
    end;
    RegistryEntry.CloseKey();
  finally
    RegistryEntry.Free;
  end;
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读