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.
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.
Comment