Delphi-PRAXiS
Seite 2 von 6     12 34     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)

DeddyH 8. Aug 2008 19:42

Re: Programmpfad anderer Programme ermitteln
 
Zeig doch mal den Source, wir können nicht hellsehen :glaskugel:

mkinzler 8. Aug 2008 19:49

Re: Programmpfad anderer Programme ermitteln
 
Da scheinen einige Units in des Uses zu fehlen

Chrischi 8. Aug 2008 19:50

Re: Programmpfad anderer Programme ermitteln
 
Folgt doch dem Link, dann habt ihr ihn. ;-)

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

DeddyH 8. Aug 2008 19:54

Re: Programmpfad anderer Programme ermitteln
 
Jaja, das böse with. TRegistry kennt keine Eigenschaft ListView1.

Chrischi 8. Aug 2008 20:01

Re: Programmpfad anderer Programme ermitteln
 
Und was kann man tun?

Bzw. gibt es eine andere Möglichkeit?

DeddyH 8. Aug 2008 20:03

Re: Programmpfad anderer Programme ermitteln
 
Natürlich. Lösch die withs raus und schreib vor alle Felder den Instanznamen davor. Also statt (Beispiel)
Delphi-Quellcode:
with Reg do
  RootKey := HKEY_LOCAL_MACHINE;
Delphi-Quellcode:
Reg.RootKey := HKEY_LOCAL_MACHINE;

Chrischi 8. Aug 2008 20:25

Re: Programmpfad anderer Programme ermitteln
 
Also genützt hat's nicht. :-(

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

DeddyH 8. Aug 2008 20:28

Re: Programmpfad anderer Programme ermitteln
 
Du musst das natürlich überall machen und auch die richtige Instanz nehmen. BeginUpdate z.B. gehört nicht zu Reg, sondern zu Listview1.Items. Lass künftig das with besser weg, es sei denn, Du weißt haargenau, was Du tust.

mkinzler 8. Aug 2008 20:29

Re: Programmpfad anderer Programme ermitteln
 
Zeig mal deine Uses

Chrischi 8. Aug 2008 20:32

Re: Programmpfad anderer Programme ermitteln
 
Die withs kommen doch nicht von mir, sondern von diesem Link...

So, hab's bearbeitet, jedoch nach wie vor die gleichen Fehlermeldungen!
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 OpenKeyReadOnly(UNINST_PATH) then
          begin
            SubKeys := TStringList.Create;
            try
              GetKeyNames(SubKeys);
              CloseKey;
              for i := 0 to subKeys.Count - 1 do
                if OpenKeyReadOnly(Format('%s\%s', [UNINST_PATH, SubKeys[i]])) then
                  try
                    sDisplayName    := ReadString('DisplayName');
                    sUninstallString := ReadString('UninstallString');
                    if sDisplayName <> '' then
                    begin
                      ListItem        := Add;
                      ListItem.Caption := sDisplayName;
                      ListItem.subitems.Add(sUninstallString);
                    end;
                  finally
                    CloseKey;
                  end;
            finally
              SubKeys.Free;
            end;
          end;
        finally
          ListView1.AlphaSort;
          EndUpdate;
        end;
    finally
      CloseKey;
      Free;
    end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:27 Uhr.
Seite 2 von 6     12 34     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