![]() |
Re: Programmpfad anderer Programme ermitteln
Zeig doch mal den Source, wir können nicht hellsehen :glaskugel:
|
Re: Programmpfad anderer Programme ermitteln
Da scheinen einige Units in des Uses zu fehlen
|
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; |
Re: Programmpfad anderer Programme ermitteln
Jaja, das böse with. TRegistry kennt keine Eigenschaft ListView1.
|
Re: Programmpfad anderer Programme ermitteln
Und was kann man tun?
Bzw. gibt es eine andere Möglichkeit? |
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;
|
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; |
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.
|
Re: Programmpfad anderer Programme ermitteln
Zeig mal deine Uses
|
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. |
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