Autor Beitrag
monty.ms
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: So 06.02.05 19:41 
Hallo..

Ich hoffe das ist hier der richtige Bereich dafür.. hab nichts anderes gefunden :?
Ich habe vor ein kleine Programm zu machen..
es soll eigentlich die Liste der Programme/Spiele aus der Softwareliste (unter Systemsteuerung) auflisten.

Ich weis das die Einträge in folgendem Pfad sind:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

Daraus hab ich dann folgendes geschrieben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button4Click(Sender: TObject); 
var reg:TRegistry; ergebnis:string
begin 
  reg:=TRegistry.Create; 
  reg.RootKey:=HKEY_LOCAL_MACHINE; 
  reg.OpenKey( '\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{061126FC-5424-41BA-8D05-3C30C0F153C7}', False); //Schlüssel öffnen 
  ergebnis:= reg.ReadString( 'DisplayName' ); //Wert auslesen 
  reg.Free; //Freigeben 
  edit1.text:=ergebnis; 
end;



Allerdings, ließt er hier ja aus einem bestimmten Eintrag die Information "DisplayName" ... Da ich aber die Einträge von anderen nicht alle kenne, sind diese ja unbekannt und ich will, dass er im \Uninstall\ Verzeichnis die Einträge durch geht und dort die "DisplayName" Einträge rausfischt.

geht das irgendwie? ich habe bisher nur diesen Weg:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button5Click(Sender: TObject); 
var 
  reg : TRegistry; 
begin 
  reg := TRegistry.Create(KEY_READ); 
  try 
    reg.RootKey := HKEY_LOCAL_MACHINE; 
    if reg.OpenKey('Software\Microsoft\Windows\Currentversion\Uninstall', FALSE) then 
    begin 
       reg.GetKeyNames(Listbox2.Items); 
    end 
    else 
      RaiselastOSError(); 
  finally 
    reg.Free; 
  end
end;


Aber hier, ließt er nur den Namen der Einträge im \Uninstall\ und da kommt bei manchen dingen viel Müll raus..

Also gibt es irgendwie eine alternative? Wäre schön wenn ihr mir helfen könntet, also danke im vorraus =)!
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 06.02.05 20:00 
Deine Hilfe ist vermutlich kaputt, sonst hättest du die entsprechenden Befehle (GetKeyNames, GetValueNames) wohl selbst gefunden. :lol:
monty.ms Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: So 06.02.05 20:17 
lol ^^ .. du wirst es kaum glauben,.. aber die ist wirklich kaputt :evil: .. aber ich habe doch den "getkeynames" befehl benutzt?!

ich habe das problem jetzt folgendermaßen gelöst:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure TForm1.Button5Click(Sender: TObject);
var
  reg: TRegIniFile;
  SoftList: TStringList;
  i: Integer;
  Name: String;
begin
  reg := TRegIniFile.Create;
  SoftList := TStringList.Create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    if reg.OpenKey('Software\Microsoft\Windows\Currentversion\Uninstall', FALSE) then
    begin
      reg.ReadSections(SoftList);
      for i := 0 to SoftList.Count - 1 do
      begin
        Name := Reg.ReadString(SoftList[i], 'DisplayName''');
        if Name <> '' then
         listbox2.items.add(name);
         memo1.lines.Add(Name);
      end;
    end;
  finally 
    SoftList.Free; 
    reg.Free; 
  end;
  ListBox2.Sorted := True;
end;



Nun bekomm ich die gewünschten Einträge in mein Memo (und meiner listbox) hinzugefügt.

Jetzt will ich noch die Versionsnummer der Software raussuchen lassen.. und beides in einem ValueListEditor ausgeben!
Ist das irgendwie möglich? Also die Versionsnummern habe ich bereits raussuchen lassen, nur wie füge ich die Werte in diesen ListEditor? Oder eignet sich eine andere Tabelle besser, da ich später die namen der programme noch raussuchen lassen will..
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 07.02.05 10:46 
Also eigentlich würde sich wohl am besten eine List-View mit mehreren Spalten (vsReport-Modus) anbieten. Da kannst du alles anzeigen lassen, was dich interessiert. Du könntest auch einen Tree-View nehmen und dort alle Schlüssel im "Uninstall"-Schlüssel auflisten. Wählt man dann einen Eintrag aus, werden alle gefundenen Daten dieses Schlüssels in der List-View daneben angezeigt.

Nur so als Tipp: Du solltest dich nicht nur auf "UninstallString" und "DisplayName" beschränken. Ich habe mir vor geraumer Zeit ein Tool geschrieben, das mir alles in "Uninstall" auflistet. Selbst Sachen, die in der Systemsteuerung nicht zu sehen sind. Einige von denen kann man sogar deinstallieren ... wenn man mutig genug ist ...
monty.ms Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Mo 07.02.05 11:02 
also mich interessieren eigentlich nur die versionsnummer und der name, denn ich will ein kleines tool basteln, welches die programme vergleicht und so mögliche kompatibilitäts probleme anzeigt.

trotzdem danke für den tip.

könntest du vielleicht mir die funktion des listviews erklären, also wie ich den einbaue?