Delphi-PRAXiS
Seite 3 von 6     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Programmpfad anderer Programme ermitteln (https://www.delphipraxis.net/118494-programmpfad-anderer-programme-ermitteln.html)

Larsi 8. Aug 2008 20:33

Re: Programmpfad anderer Programme ermitteln
 
Also eigentlich kann in dem Code doch gar kein Fehler sein, der kommt ja ausm Delphi Swiss Center meiner Meinung nach. Dort stand doch auch was du einbinden musst oder?

mkinzler 8. Aug 2008 20:36

Re: Programmpfad anderer Programme ermitteln
 
Es fehlt ComCtrls in den Uses

DeddyH 8. Aug 2008 20:38

Re: Programmpfad anderer Programme ermitteln
 
Himmel, Gesäß und Nähgarn, ich hasse diese Code-Kopiererei ohne Hintergrundwissen :wall:. Also gut, ich vervollständige das mal:
Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Registry;

procedure TForm2.FormCreate(Sender: TObject);
const
  UNINST_PATH = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall';
var
  Reg: TRegistry;
  SubKeys: TStringList;
  ListItem: TlistItem;
  i: integer;
  sDisplayName, sUninstallString: string;
begin
{
  ListView1.ViewStyle := vsReport;
  ListView1.Columns.add;
  ListView1.Columns.add;
  ListView1.Columns[0].caption := 'DisplayName';
  ListView1.Columns[1].caption := 'UninstallString';
  ListView1.Columns[0].Width := 300;
  ListView1.Columns[1].Width := 300;
}
  Reg := TRegistry.Create;

    try

        try
           Listview1.Items.BeginUpdate;
           Listview1.Items.Clear;
           Reg.RootKey := HKEY_LOCAL_MACHINE;
          if Reg.OpenKeyReadOnly(UNINST_PATH) then //hier
          begin
            SubKeys := TStringList.Create;
            try
              Reg.GetKeyNames(SubKeys); //und hier
              Reg.CloseKey; //und hier
              for i := 0 to subKeys.Count - 1 do
                if Reg.OpenKeyReadOnly(Format('%s\%s', [UNINST_PATH, SubKeys[i]])) then //und hier
                  try
                    sDisplayName    := Reg.ReadString('DisplayName'); //und hier
                    sUninstallString := Reg.ReadString('UninstallString'); //und hier
                    if sDisplayName <> '' then
                    begin
                      ListItem        := Listview1.Add; //und hier
                      ListItem.Caption := sDisplayName;
                      ListItem.subitems.Add(sUninstallString);
                    end;
                  finally
                    Reg.CloseKey; //und hier
                  end;
            finally
              SubKeys.Free;
            end;
          end;
        finally
          ListView1.AlphaSort;
          Listview1.Items.EndUpdate; //und hier
        end;
    finally
      Reg.CloseKey; //und hier
      Reg.Free; //und hier
    end;
end;
Wenn ich nichts übersehen habe, sollte das so gehen.

Chrischi 8. Aug 2008 20:41

Re: Programmpfad anderer Programme ermitteln
 
Hab ich gerade eingefügt. Also Fehlermeldungen sind schon mal weniger:

Delphi-Quellcode:
[Fehler] Unit2.pas(49): E2003 Undefinierter Bezeichner: 'Listview1'
[Fehler] Unit2.pas(49): E2066 Operator oder Semikolon fehlt
[Fehler] Unit2.pas(50): E2066 Operator oder Semikolon fehlt
[Fehler] Unit2.pas(65): E2066 Operator oder Semikolon fehlt
[Fehler] Unit2.pas(77): E2066 Operator oder Semikolon fehlt
[Fehler] Unit2.pas(78): E2066 Operator oder Semikolon fehlt
[Fataler Fehler] Project2.dpr(5): F2063 Verwendete Unit 'Unit2.pas' kann nicht compiliert werden

mkinzler 8. Aug 2008 20:43

Re: Programmpfad anderer Programme ermitteln
 
Poste mal die komplette Unit

DeddyH 8. Aug 2008 20:44

Re: Programmpfad anderer Programme ermitteln
 
ListView1 liegt aber auf Form2?

Chrischi 8. Aug 2008 20:45

Re: Programmpfad anderer Programme ermitteln
 
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Registry, ComCtrls;

type
  TForm2 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
const
  UNINST_PATH = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall';
var
  Reg: TRegistry;
  SubKeys: TStringList;
  ListItem: TlistItem;
  i: integer;
  sDisplayName, sUninstallString: string;
begin
{
  ListView1.ViewStyle := vsReport;
  ListView1.Columns.add;
  ListView1.Columns.add;
  ListView1.Columns[0].caption := 'DisplayName';
  ListView1.Columns[1].caption := 'UninstallString';
  ListView1.Columns[0].Width := 300;
  ListView1.Columns[1].Width := 300;
}
  Reg := TRegistry.Create;

    try
        try
           Listview1.Items.BeginUpdate;
           Listview1.Items.Clear;
           Reg.RootKey := HKEY_LOCAL_MACHINE;
          if Reg.OpenKeyReadOnly(UNINST_PATH) then
          begin
            SubKeys := TStringList.Create;
            try
              Reg.GetKeyNames(SubKeys);
              Reg.CloseKey;
              for i := 0 to subKeys.Count - 1 do
                if Reg.OpenKeyReadOnly(Format('%s\%s', [UNINST_PATH, SubKeys[i]])) then
                  try
                    sDisplayName    := Reg.ReadString('DisplayName');
                    sUninstallString := Reg.ReadString('UninstallString');
                    if sDisplayName <> '' then
                    begin
                      ListItem        := Listview1.Add;
                      ListItem.Caption := sDisplayName;
                      ListItem.subitems.Add(sUninstallString);
                    end;
                  finally
                    Reg.CloseKey;
                  end;
            finally
              SubKeys.Free;
            end;
          end;
        finally
          ListView1.AlphaSort;
          Listview1.Items.EndUpdate;
        end;
    finally
      Reg.CloseKey;
      Reg.Free;
    end;
end;

end.

mkinzler 8. Aug 2008 20:47

Re: Programmpfad anderer Programme ermitteln
 
Zitat:

Zitat von DeddyH
ListView1 liegt aber auf Form2?

Nein, existiert garnicht :wall:

DeddyH 8. Aug 2008 20:47

Re: Programmpfad anderer Programme ermitteln
 
Listview1 liegt anscheinend auf Form1. Also vor jedes "ListView1" "Form1." davorschreiben, damit es erstmal läuft. Guter Stil ist das zwar nicht, aber was soll' s.

mkinzler 8. Aug 2008 20:49

Re: Programmpfad anderer Programme ermitteln
 
Vielleicht helfen etwas Grundlagen zum Verständnis


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:25 Uhr.
Seite 3 von 6     123 45     Letzte »    

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