Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Installed Software function (https://www.delphipraxis.net/160636-installed-software-function.html)

value is NULL 24. Mai 2011 09:45

Installed Software function
 
Hi Delphianer

habe folgende Function im Netz gefunden:

Delphi-Quellcode:
function GetUninstallList : string;
const
  cUninstallPath = 'Software\Microsoft\Windows\CurrentVersion\Uninstall';
var
  reg: TRegistry;
  TmpKeyNames: TStringList;
  i: Integer;
  TmpResult: string;
begin
  TmpResult := '';
  Result := TmpResult;
  TmpKeyNames := TStringList.Create;
  TmpKeyNames.Clear;
  reg := TRegistry.Create;
  reg.RootKey := HKEY_LOCAL_MACHINE;
  if reg.KeyExists(cUninstallPath) then
    if reg.OpenKeyReadOnly(cUninstallPath) then
      reg.GetKeyNames(TmpKeyNames);
  reg.CloseKey;
  for i := 0 to TmpKeyNames.Count - 1 do
    if reg.OpenKeyReadOnly(cUninstallPath + '\' + TmpKeyNames.Strings[i]) then
    begin
      if reg.ValueExists('DisplayName') then
        TmpResult := TmpResult + reg.ReadString('DisplayName') + CRLF;
      reg.CloseKey;
    end;
  reg.Free;
  TmpKeyNames.Free;
  Result := TmpResult;
end;
Bekomme bei folgender Zeile:
Delphi-Quellcode:
TmpResult := TmpResult + reg.ReadString('DisplayName') + CRLF;
folgenden Fehler:
Code:
[DCC Fehler] Unit1.pas(35): E2003 Undeklarierter Bezeichner: 'CRLF'
Was habe ich den falsch gemacht?

LG & Danke schon mal!

Deep-Sea 24. Mai 2011 09:52

AW: Installed Software function
 
Ja wo ist denn CRLF definiert?! Nirgends, genau.
Ersetzte es z.B. mal mit sLineBreak.
(An sich wäre die Übergabe von TStrings hierfür eher geeignet ... aber naja.)

value is NULL 24. Mai 2011 10:04

AW: Installed Software function
 
Funzt einwandfrei! DANKE!

Deep-Sea 24. Mai 2011 10:09

AW: Installed Software function
 
Ich hoffe du weißt auch warum es jetzt geht und arbeitest nicht nur mit Copy & Paste :roll:

DeddyH 24. Mai 2011 10:16

AW: Installed Software function
 
Sehe ich das falsch, oder hat diese Funktion noch Optimierungspotential? Wozu die Variable tmpResult gebraucht wird, erschließt sich mir z.B. nicht.

Deep-Sea 24. Mai 2011 10:18

AW: Installed Software function
 
Das ist zwar sinnlos, aber nicht so schlimm. Schlimmer finde ich, dass kein Try-finally-Block genutzt wird, um die erzeugten Objekte sicher wieder freizugeben.

DeddyH 24. Mai 2011 10:20

AW: Installed Software function
 
Jepp, auch ein Clear einer gerade erzeugten TStringlist ist so flüssig, das ist schon überflüssig. Wer opfert sich und schreibt das mal ins Reine?

Deep-Sea 24. Mai 2011 10:34

AW: Installed Software function
 
Ich denke mal, so ist es besser. Ob mein Stil euch aber gefällt, ist eine andere Sache :wink:
Delphi-Quellcode:
procedure GetUninstallList(AList: TStrings);
const
  UNINSTALL_PATH = 'Software\Microsoft\Windows\CurrentVersion\Uninstall\';
  DISPLAY_NAME = 'DisplayName';
var
  LIndex: Integer;
begin
  AList.Clear;
  With TRegistry.Create do
  try
    RootKey := HKEY_LOCAL_MACHINE;
    If KeyExists(UNINSTALL_PATH) and OpenKeyReadOnly(UNINSTALL_PATH) then
    begin
      GetKeyNames(AList);
      CloseKey;
    end;
    LIndex := 0;
    While LIndex < AList.Count do
    begin
      If not (OpenKeyReadOnly(UNINSTALL_PATH + AList[LIndex]) and
        ValueExists(DISPLAY_NAME)) then AList.Delete(LIndex)
      else begin
        AList[LIndex] := ReadString(DISPLAY_NAME);
        Inc(LIndex);
      end;
      CloseKey;
    end;
  finally
    Free;
  end;
end;

Satty67 24. Mai 2011 10:55

AW: Installed Software function
 
<falsche Bedenken gelöscht>

DeddyH 24. Mai 2011 10:57

AW: Installed Software function
 
Dann ist es einer weniger :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz