Chcę wypisać listę kluczy z rejestru tak jak to robi JV16 PowerTools, tzn.:
- wypisać listę programów z klucza HKEY_CURRENT_USER\Software\ łącznie z pierwszym podkluczem.
Wygląda to tak:
Jak widać wpisów Gadu-Gadu poniższy przykład znalazł jeden, podczas gdy JV16 trzy (bo szukał także w podkluczu Gadu-Gadu)
Poniższej zamieszczam przykład, który wypisuje jedynie listę bez jeszcze jednego podklucza i ignoruje następujące wpisy systemowe:
Adaptec
Canon
Classes
Install
Intel
Microsoft
Policies
Vision
z pliku ignoruj.dat
var
Klucz, Ignor : TStringList;
item : TLIstItem;
j, i, nr, zignorowano : integer;
Reg: TRegistry;
begin
nr := 1;
zignorowano := 0;
ListView.Clear;
Reg := TRegistry.Create;
Klucz := TStringList.Create;
Ignor := TStringList.Create;
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('Software\', True);
Reg.GetKeyNames(Klucz);
Ignor.LoadFromFile(ExtractFilePath(Application.ExeName) + 'ignoruj.dat');
for i := 0 to Klucz.Count-1 do
begin
for j := Ignor.Count-1 downto 0 do
if Klucz.Strings[i] = Ignor.Strings[j] then
begin
Item := ListView.Items.Add;
Item.Caption := Klucz.Strings[i] + ' (nie usuwaj !)';
Item.ImageIndex := -1;
Item.StateIndex := 1;
Item.SubItems.Add('\Software\' + Klucz.Strings[i]);
Inc(zignorowano);
nr := 0;
Break;
end
else nr := 1;
if nr = 1 then
begin
Item := ListView.Items.Add;
Item.Caption := Klucz.Strings[i];
Item.ImageIndex := -1;
Item.StateIndex := 2;
Item.SubItems.Add('\Software\' + Klucz.Strings[i]);
end;
end;
Reg.CloseKey;
Reg.Free;
Klucz.Free;
Ignor.Free;
Ignorowane.Caption := 'Zignorowano: ' + inttostr(zignorowano);
end;
Proszę o modyfikacje przykładu. [soczek]
//dopisane...
Udało mi się, własnymi siłami dotrzeć do mety... oto wynik, może komuś się przyda w przyszłości...:
var
Klucz1, Klucz2, Ignor : TStringList;
item : TLIstItem;
j, i, k, nr, ign : integer;
Reg: TRegistry;
begin
nr := 1;
ign := 0;
ListView.Clear;
Reg := TRegistry.Create;
Klucz1 := TStringList.Create;
Klucz2 := TStringList.Create;
Ignor := TStringList.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software\', True);
Reg.GetKeyNames(Klucz1);
Reg.CloseKey;
for i := 0 to Klucz1.Count-1 do
begin
for j := Ignor.Count-1 downto 0 do
if Klucz1.Strings[i] = Ignor.Strings[j] then
begin
Item := ListView.Items.Add;
Item.Caption := Klucz1.Strings[i];
Item.ImageIndex := -1;
Item.StateIndex := 1;
Item.SubItems.Add(Klucz1.Strings[i]);
Inc(ign);
nr := 0;
Break;
end
else nr := 1;
if nr = 1 then
begin
Application.ProcessMessages;
Reg.OpenKey('Software\' + Klucz1.Strings[i], True);
Reg.GetKeyNames(Klucz2);
Reg.CloseKey;
if Klucz2.Count > 0 then
begin
for k := 0 to Klucz2.Count-1 do
begin
Item := ListView.Items.Add;
Item.Caption := Klucz1.Strings[i];
Item.ImageIndex := -1;
Item.StateIndex := 2;
Item.SubItems.Add(Klucz2.Strings[k]);
end;
end
else
begin
Item := ListView.Items.Add;
Item.Caption := Klucz1.Strings[i];
Item.ImageIndex := -1;
Item.StateIndex := 0;
Item.SubItems.Add(Klucz1.Strings[i]);
end;
end;
end;
Reg.CloseKey;
Reg.Free;
Klucz1.Free;
Klucz2.Free;
Ignor.Free;
Label1.Caption := 'Zignorowano: ' + inttostr(ign);
end;