比如:
HKEY_CURRENT_USER\Console 下可能会有很多数值,而这些数值的个数和名称事先都不知道,怎么样才能把这些数据读取出来呢
谢谢

解决方案 »

  1.   

    procedure GetKeyNames(Strings: TStrings);
    procedure GetValueNames(Strings: TStrings);
      

  2.   

    注册表递归
     procedure xxxxx(KeyName) 
    var...begin定位主键的位置if Registry.HasSubKeys thenbeginRegistry.GetKeyNames(TString);for i:=0 to TString.Items.Count-1 doxxxxx(TString.Values[i])end;end;
     
      

  3.   

    unit Main;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Registry, StdCtrls;type
      TfrmMain = class(TForm)
        ListBox1: TListBox;
        Button1: TButton;
        Edit1: TEdit;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
      private
        { Private declarations }
        m_registry: TRegistry;
      public
        { Public declarations }
      end;var
      frmMain: TfrmMain;implementation{$R *.DFM}procedure TfrmMain.FormCreate(Sender: TObject);
    begin
      m_registry := TRegistry.Create;
    end;procedure TfrmMain.FormDestroy(Sender: TObject);
    begin
      m_registry.Free;
    end;procedure TfrmMain.Button1Click(Sender: TObject);
    begin
    //  m_registry.GetValueNames(ListBox1.Items);
    //  if m_registry.HasSubKeys then
    //  begin
    //    ShowMessage('HAS');
    //  end
    //  else
    //  begin
    //    ShowMessage('NO');
    //  end;
    //try
    //    Reg:=TRegistry.create;
    //    Reg.RootKey := HKEY_LOCAL_MACHINE;
    //    if reg.KeyExists('Software\database') then
    //    begin
    //      if Reg.OpenKey('\Software\database', True) then
    //      begin
    //       edit1.Text:=reg.ReadString('username');
    //       Reg.CloseKey;
    //      end;
    //    end else
    //    begin
    //      reg.CreateKey('Software\database');
    //    end;
    //  finally
    //   freeandnil(reg);
    // end;
      m_registry.RootKey := HKEY_CURRENT_USER;
      if m_registry.KeyExists('Software\Cashier.cn\Test_GcReg') then
      begin
        if m_registry.OpenKey('Software\Cashier.cn\Test_GcReg', True) then
        begin
          Edit1.Text := m_registry.ReadString('Edit1');
          m_registry.CloseKey;
        end;
      end
      else
      begin
        m_registry.CreateKey('Software\Cashier.cn\Test_GcReg');
      end;
    end;procedure TfrmMain.Button2Click(Sender: TObject);
    begin
    //  try
    //    Reg:=TRegistry.create;
    //    Reg.RootKey := HKEY_LOCAL_MACHINE;
    //    if Reg.OpenKey('\Software\database', True) then
    //    begin
    //     if reg.valueexists('username') then
    //       edit1.Text:=reg.ReadString('username')
    //     else edit1.text := '';
    //     Reg.CloseKey;
    //    end;
    //  finally
    //   freeandnil(reg);
    // end;
      m_registry.RootKey := HKEY_CURRENT_USER;
      if m_registry.OpenKey('Software\Cashier.cn\Test_GcReg', True) then
      begin
        if m_registry.ValueExists('Edit2') then
        begin
          Edit1.Text := m_registry.ReadString('Edit2');
        end
        else
        begin
          Edit1.Text := '';
        end;
        m_registry.CloseKey;
      end;
    end;procedure TfrmMain.Button3Click(Sender: TObject);
    begin
      m_registry.RootKey := HKEY_CURRENT_USER;
      if m_registry.OpenKey('Software\Cashier.cn\Test_GcReg', True) then
      begin
        m_registry.GetValueNames(ListBox1.Items);
    //    m_registry.CloseKey;
      end;
    end;procedure TfrmMain.Button4Click(Sender: TObject);
    begin
      if ListBox1.ItemIndex < 0 then Exit;
      if m_registry.ValueExists(ListBox1.Items.Strings[ListBox1.ItemIndex]) then
      begin
        Edit1.Text := m_registry.ReadString(ListBox1.Items.Strings[ListBox1.ItemIndex]);
      end
      else
      begin
        Edit1.Text := '';
      end;
    end;end.
      

  4.   

    这是我做的一个小测试,
    窗体上就一个Edit,一个List,四个Button!
      

  5.   

    结合下面的四个函数去遍历 ^_^判断指定主键是否存在,其下是否有主键,并获取主键名称。
    KeyExists用于判断指定主键是否存在:
    function KeyExists(const Key: string): Boolean;//返回值为True表示主键存在。HasSubKeys用于判断指定主键下是否有子键:function HasSubKeys: Boolean;
    返回值为True表示主键下有子键。GetKeyNames用于获取子键名称:procedure GetKeyNames(Strings: TStrings);
    Strings用于返回当前主键下各子键的名称。获取主键下的数据值名称:procedure GetvalueNames(Strings: TStrings)。
    Strings用于返回当前主键下各数值名称。
      

  6.   

    gobiz(拔剑容易收剑难)  
    micher_yan(ASP转Delphi)能不能多加些说明,最好有实例,GetKeyNames我也用过,但好是出错。
     g961681(我好惨啊!) 
    你的答案好象不符合我的要求,那些数据全是未知的。