Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Softwareliste (https://www.delphipraxis.net/39686-softwareliste.html)

monty.ms 6. Feb 2005 14:04


Softwareliste
 
Gibt es eine Möglichkeit die Inhalte der "Software"-Liste (aus der Systemsteuerung) in ein Memo/ListBox aufzulisten?
aus der suche im forum weis ich jetzt, dass die Einträge in der Registry zu finden sind:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Uninstall

Nur wie kann ich die Einträge aus der Registry in eine ListBox einfügen?

danke im vorraus!

Robert Marquardt 6. Feb 2005 14:53

Re: Softwareliste
 
Schlag doch mal die Hilfe fuer TRegistry auf.

monty.ms 6. Feb 2005 14:59

Re: Softwareliste
 
die von delphi? die habe ich komischer weise nicht.. da kommt immer ein fehler das die hlp datei nicht vorhanden ist und ich soll sie suchen..

Luckie 6. Feb 2005 15:02

Re: Softwareliste
 
Dann installier dein Delphi noch mal richtig.

monty.ms 6. Feb 2005 16:08

Re: Softwareliste
 
hab ich schon 4 mal versucht.. geht nicht. Kann man die irgendwo laden oder gibt es eine seite wo diese nochmal aufgefasst sind? oder kann mir einer bitte konkret helfen?

so.. hab jetzt was gefunden:

Delphi-Quellcode:
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;
Da komm ich auch zu einem guten ergebnis, das mir der Name von dem Programm angezeigt wird.

Aber mein Vorhaben ist ja, eine Liste zu erstellen, von ALLEN Einträgen.. und da ich ja auf fremden pcs nicht die Einträge kenne, müsste es doch eine möglichkeit geben, das gesamten /Uninstall Verzeichnis nach "DisplayName" zu durchwühlen und da die Werte lesen?!

Ich hätte mir vorgestellt, dass man den Eintrag (z.b. {061126FC-5424-41BA-8D05-3C30C0F153C7} ) mit irgend was zu ersetzen was für alle gilt, alá "*" wie bei *.txt oder so..


edit: ich hab jetzt das folgender maßen gemacht!

Delphi-Quellcode:
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;

dadurch komm ich aber leider nur an die namen der einzelnen einträge ran.. wie komm ich jetzt noch an die "DisplayName" ran.. ? =(

mael 6. Feb 2005 18:09

Re: Softwareliste
 
So geht's:
Delphi-Quellcode:
var
  reg: TRegistry;
  BaseKey: string;
  KeyNames: TStringList;
  i: Integer;
begin
  ListBox2.Clear;
  reg := TRegistry.Create(KEY_READ);
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    BaseKey := '\Software\Microsoft\Windows\Currentversion\Uninstall';
    if reg.OpenKey(BaseKey, False) then
    begin
      KeyNames := TStringList.Create;
      try
        reg.GetKeyNames(KeyNames);
        for i := 0 to KeyNames.Count - 1 do
          if reg.OpenKey(BaseKey + '\' + KeyNames[i], False) then
            ListBox2.Items.Add(reg.ReadString('DisplayName'));
      finally
        KeyNames.Free;
      end;
    end
    else
      RaiselastOSError();
  finally
    reg.Free;
  end;
BTW: OpenKeyReadOnly ist besser als OpenKey wenn Du nix schreiben mußt.

monty.ms 6. Feb 2005 18:18

Re: Softwareliste
 
ok.. vielen danke =)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz