Announcement

Collapse
No announcement yet.

Registry Fehler?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Registry Fehler?

    Hallo,
    ich arbeite zur zeit an der Registry von Windows 2000 Build 5.00.2195
    da ist mir folgender Fehler aufgefallen, in der Registry „HKEY_LOCAL_MACHINE\System\ControlSet002\Control\“ , werden einige Unterschlüssel nicht richtig von der PROCEDURE GetKeyNames(keys :stringList) eingelesen.
    Jetzt möchte ich gerne Wissen ob das an der Funktion liegt, oder aber an Windows 2000.
    Zur Überprüfung habe ich ein kleines Programm geschrieben. Ich verwende Delphi 5.0 Enterprise.
    Danke schon mal in Voraus.

    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    Registry, StdCtrls, ComCtrls;
    type
    TForm1 = class(TForm)
    Button1: TButton;
    StatusBar1: TStatusBar;
    Memo1: TMemo;
    GroupBox1: TGroupBox;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    procedure Button1Click(Sender: TObject);
    private
    { Private-Deklarationen }
    reg : TRegistry;
    root : String;
    procedure Analysieren(schluessel :string);
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;
    count : Integer;
    implementation

    {$R *.DFM}
    procedure TForm1.Analysieren(schluessel :string);
    var
    keys : TStrings;
    i : Integer;
    aktivekey:String;
    begin
    keys := TStringList.Create;
    try
    if reg.OpenKey(schluessel,false) then
    begin
    aktiveKey := reg.CurrentPath;
    if reg.HasSubKeys then
    begin
    reg.GetKeyNames(keys);
    for i:= 0 to keys.count - 1 do
    begin
    Application.ProcessMessages;
    InC(Count);
    if keys.Strings[i] = '' then
    begin
    Memo1.Lines.Add(root + '\' + aktivekey +
    ' Fehler! Kann Unterschlüssel nicht lesen.');
    break;
    end;
    Statusbar1.SimpleText:= IntToStr(count) + ' '+ aktivekey+keys[i];
    if aktiveKey = '' then
    begin
    Analysieren('\'+ aktivekey+keys.Strings[i]+'\');
    end
    else
    begin
    if aktiveKey[1] = '\' then
    Delete(aktiveKey,1,1);
    if aktiveKey[Length(aktiveKey)] = '\' then
    Delete(aktiveKey,Length(aktiveKey),1);
    Analysieren('\'+ aktiveKey +'\'+ keys.Strings[i]+'\');
    end;
    end;
    end;
    end;
    finally
    keys.Free;
    end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Memo1.Clear;
    reg := TRegistry.Create;
    if Checkbox1.Checked then
    begin
    reg.RootKey := HKEY_LOCAL_MACHINE;
    root := 'HKEY_LOCAL_MACHINE';
    Analysieren('\');
    end;
    if Checkbox2.Checked then
    begin
    reg.RootKey := HKEY_CURRENT_USER;
    root := 'HKEY_CURRENT_USER';
    Analysieren('\');
    end;
    if Checkbox3.Checked then
    begin
    reg.RootKey := HKEY_USERS;
    root := 'HKEY_USERS';
    Analysieren('\');
    end;
    if Checkbox4.Checked then
    begin
    reg.RootKey := HKEY_CLASSES_ROOT;
    root := 'HKEY_CLASSES_ROOT';
    Analysieren('\');
    end;
    if Checkbox5.Checked then
    begin
    reg.RootKey := HKEY_CURRENT_CONFIG;
    root := 'HKEY_CURRENT_CONFIG';
    Analysieren('\');
    end;
    reg.Free;
    end;

    end.

  • #2
    Jetzt probiere ich es noch mal

    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    Registry, StdCtrls, ComCtrls;
    type
    TForm1 = class(TForm)
    Button1: TButton;
    StatusBar1: TStatusBar;
    Memo1: TMemo;
    GroupBox1: TGroupBox;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    procedure Button1Click(Sender: TObject);
    private
    { Private-Deklarationen }
    reg : TRegistry;
    root : String;
    procedure Analysieren(schluessel :string);
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;
    count : Integer;
    implementation

    {$R *.DFM}
    procedure TForm1.Analysieren(schluessel :string);
    var
    keys : TStrings;
    i : Integer;
    aktivekey:String;
    begin
    keys := TStringList.Create;
    try
    if reg.OpenKey(schluessel,false) then
    begin
    aktiveKey := reg.CurrentPath;
    //DatenwerteAufschluesseln(aktiveKey);
    // schluessel offen ?
    if reg.HasSubKeys then
    begin
    reg.GetKeyNames(keys);
    for i:= 0 to keys.count - 1 do
    begin
    Application.ProcessMessages;
    InC(Count);
    if keys.Strings[i] = '' then
    begin
    Memo1.Lines.Add(root + '\' + aktivekey +
    ' Fehler!! Kann Unterschlüssel nicht lesen.');
    break;
    end;
    Statusbar1.SimpleText:= IntToStr(count) + ' '+ aktivekey+keys[i];
    if aktiveKey = '' then
    begin
    Analysieren('\'+ aktivekey+keys.Strings[i]+'\');
    end
    else
    begin
    if aktiveKey[1] = '\' then
    Delete(aktiveKey,1,1);
    if aktiveKey[Length(aktiveKey)] = '\' then
    Delete(aktiveKey,Length(aktiveKey),1);
    Analysieren('\'+ aktiveKey +'\'+ keys.Strings[i]+'\');
    end;
    end;
    end;
    end;
    finally
    keys.Free;
    end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Memo1.Clear;
    reg := TRegistry.Create;
    if Checkbox1.Checked then
    begin
    reg.RootKey := HKEY_LOCAL_MACHINE;
    root := 'HKEY_LOCAL_MACHINE';
    Analysieren('\');
    end;
    if Checkbox2.Checked then
    begin
    reg.RootKey := HKEY_CURRENT_USER;
    root := 'HKEY_CURRENT_USER';
    Analysieren('\');
    end;
    if Checkbox3.Checked then
    begin
    reg.RootKey := HKEY_USERS;
    root := 'HKEY_USERS';
    Analysieren('\');
    end;
    if Checkbox4.Checked then
    begin
    reg.RootKey := HKEY_CLASSES_ROOT;
    root := 'HKEY_CLASSES_ROOT';
    Analysieren('\');
    end;
    if Checkbox5.Checked then
    begin
    reg.RootKey := HKEY_CURRENT_CONFIG;
    root := 'HKEY_CURRENT_CONFIG';
    Analysieren('\');
    end;
    reg.Free;
    end;

    end

    Comment


    • #3
      unit Unit1;

      interface

      uses

      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Registry, StdCtrls, ComCtrls;

      type

      TForm1 = class(TForm)

      Button1: TButton;

      StatusBar1: TStatusBar;

      Memo1: TMemo;

      GroupBox1: TGroupBox;

      CheckBox1: TCheckBox;

      CheckBox2: TCheckBox;

      CheckBox3: TCheckBox;

      CheckBox4: TCheckBox;

      CheckBox5: TCheckBox;

      procedure Button1Click(Sender: TObject);

      private

      { Private-Deklarationen }

      reg : TRegistry;

      root : String;

      procedure Analysieren(schluessel :string);

      public

      { Public-Deklarationen }

      end;

      var

      Form1: TForm1;

      count : Integer;

      implementation

      {$R *.DFM}

      procedure TForm1.Analysieren(schluessel :string);

      var

      keys : TStrings;

      i : Integer;

      aktivekey:String;

      begin

      keys := TStringList.Create;

      try

      if reg.OpenKey(schluessel,false) then

      begin

      aktiveKey := reg.CurrentPath;


      if reg.HasSubKeys then

      begin

      reg.GetKeyNames(keys);

      for i:= 0 to keys.count - 1 do

      begin

      Application.ProcessMessages;

      InC(Count);

      if keys.Strings[i] = '' then

      begin

      Memo1.Lines.Add(root + '\' + aktivekey +

      ' Fehler!! Kann Unterschlüssel nicht
      lesen.');

      break;

      end;

      Statusbar1.SimpleText:= IntToStr(count) + ' '+
      aktivekey+keys[i];

      if aktiveKey = '' then

      begin

      Analysieren('\'+ aktivekey+keys.Strings[i]+'\');

      end

      else

      begin

      if aktiveKey[1] = '\' then

      Delete(aktiveKey,1,1);

      if aktiveKey[Length(aktiveKey)] = '\' then

      Delete(aktiveKey,Length(aktiveKey),1);

      Analysieren('\'+ aktiveKey +'\'+ keys.Strings[i]+'\');

      end;

      end;

      end;

      end;

      finally

      keys.Free;

      end;

      end;

      procedure TForm1.Button1Click(Sender: TObject);

      begin

      Memo1.Clear;

      reg := TRegistry.Create;

      if Checkbox1.Checked then

      begin

      reg.RootKey := HKEY_LOCAL_MACHINE;

      root := 'HKEY_LOCAL_MACHINE';

      Analysieren('\');

      end;

      if Checkbox2.Checked then

      begin

      reg.RootKey := HKEY_CURRENT_USER;

      root := 'HKEY_CURRENT_USER';

      Analysieren('\');

      end;

      if Checkbox3.Checked then

      begin

      reg.RootKey := HKEY_USERS;

      root := 'HKEY_USERS';

      Analysieren('\');

      end;

      if Checkbox4.Checked then

      begin

      reg.RootKey := HKEY_CLASSES_ROOT;

      root := 'HKEY_CLASSES_ROOT';

      Analysieren('\');

      end;

      if Checkbox5.Checked then

      begin

      reg.RootKey := HKEY_CURRENT_CONFIG;

      root := 'HKEY_CURRENT_CONFIG';

      Analysieren('\');

      end;

      reg.Free;

      end;

      end

      Comment

      Working...
      X