如何读取注册表项的默认值 [英] How to read Default Value of Registry Key

查看:535
本文介绍了如何读取注册表项的默认值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Delphi XE2项目使用注册表项工作。所以我定义了以下代码:

 程序TMainForm.BitBtn01Click(发件人:TObject); 
var
RegistryEntry:TRegistry;
begin
RegistryEntry:= TRegistry.Create(KEY_READ或KEY_WOW64_64KEY);
RegistryEntry.RootKey:= HKEY_LOCAL_MACHINE;
if(not RegistryEntry.KeyExists('Software\MyCompanyName\MyName\'))然后
begin
RegistryEntry.Access:= KEY_WRITE或KEY_WOW64_64KEY;
RegistryEntry.OpenKey('Software\MyCompanyName\MyName\',True);
RegistryEntry.WriteString('','MyFirstProject');
end
else
begin
Memo01.Lines.Add(RegistryEntry.ReadString('(Default)')); //不工作
Memo01.Lines.Add(RegistryEntry.ReadString('')); //不工作
Memo01.Lines.Add(RegistryEntry.ReadString('@')); //不工作
end;
RegistryEntry.CloseKey();
RegistryEntry.Free;
结束

我的要求是检查默认值MyName并显示在Memo01中。但没有什么是痛苦的。所以我尝试了另一种方式如下:

 程序TMainForm.BitBtn01Click(发件人:TObject); 
var
RegistryEntry:TRegistry;
RegistryString:string;
begin
RegistryEntry:= TRegistry.Create(KEY_READ或KEY_WOW64_64KEY);
RegistryEntry.RootKey:= HKEY_LOCAL_MACHINE;
if(not RegistryEntry.KeyExists('Software\MyCompanyName\MyName\'))然后
begin
RegistryEntry.Access:= KEY_WRITE或KEY_WOW64_64KEY;
RegistryEntry.OpenKey('Software\MyCompanyName\MyName\',True);
RegistryEntry.WriteString('','MyFirstProject');
end
else
begin
RegistryString:= RegistryEntry.ReadString('(Default)'); //不工作
RegistryString:= RegistryEntry.ReadString(''); //不工作
RegistryString:= RegistryEntry.ReadString('@'); //不工作
Memo01.Lines.Add(RegistryString);
结束
RegistryEntry.CloseKey();
RegistryEntry.Free;
结束

但它也不起作用。

解决方案

你的其他部分没有Openkey。

  Const 
C_KEY ='Software\MyCompanyName\MyName\'
var
RegistryEntry:TRegistry;
RegistryString:string;
begin
RegistryEntry:= TRegistry.Create(KEY_READ或KEY_WOW64_64KEY);
try
RegistryEntry.RootKey:= HKEY_LOCAL_MACHINE;
if(not RegistryEntry.KeyExists(C_KEY))then
begin
RegistryEntry.Access:= KEY_WRITE或KEY_WOW64_64KEY;
如果RegistryEntry.OpenKey(C_KEY,true)then
RegistryEntry.WriteString('','MyFirstProject');
end
else
begin
RegistryEntry.Access:= KEY_READ或KEY_WOW64_64KEY;
如果RegistryEntry.OpenKey(C_KEY,false)then
begin
Memo01.Lines.Add(RegistryEntry.ReadString(''));
结束
结束
RegistryEntry.CloseKey();
finally
RegistryEntry.Free;
结束
结束


I am having one Delphi XE2 project to work something with registry key. So I have defined the following codes :

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('Software\MyCompanyName\MyName\')) then
    begin
      RegistryEntry.Access:= KEY_WRITE or KEY_WOW64_64KEY;
      RegistryEntry.OpenKey('Software\MyCompanyName\MyName\',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;

My requirement is to check the Default Value of "MyName" and to show in Memo01. But nothing is heppening. So I have tried another way as follows :

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('Software\MyCompanyName\MyName\')) then
    begin
      RegistryEntry.Access:= KEY_WRITE or KEY_WOW64_64KEY;
      RegistryEntry.OpenKey('Software\MyCompanyName\MyName\',True);
      RegistryEntry.WriteString('', '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;

But it is also not working.

解决方案

There is no Openkey in your else part.

Const
  C_KEY='Software\MyCompanyName\MyName\';
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;

这篇关于如何读取注册表项的默认值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆