AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Liste der Exe-Pfade aller installierten Programme
Thema durchsuchen
Ansicht
Themen-Optionen

Liste der Exe-Pfade aller installierten Programme

Ein Thema von PeterPanino · begonnen am 4. Jan 2013 · letzter Beitrag vom 6. Jan 2013
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#31

AW: Liste der Exe-Pfade aller installierten Programme

  Alt 4. Jan 2013, 17:41
Das mit "(welche durch keine Regel definiert ist)" wird interessant...
Eine Menge von Objekten, die durch keine Regel definiert ist, könnte z.B. sein: Auto, Apfel, Intelligenz, Geduld, Universum, ...

In #2 hat Popov schon einen brauchbaren Ansatz geliefert, der aber für alle Laufwerke mit gewissewn Ordnern...
Dauert zu lange.

Geändert von PeterPanino ( 4. Jan 2013 um 17:45 Uhr) Grund: Edit: Auto, Apfel, Intelligenz, Geduld, Universum, sinnerfassendes Lesen, ...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#32

AW: Liste der Exe-Pfade aller installierten Programme

  Alt 4. Jan 2013, 17:44
6 aufeinanderfolgene Beiträge innerhalb einer halben Stunde, wenn das kein Pushen ist... Außerdem kann ich mit der Beschreibung wenig bis gar nichts anfangen, wie soll man da weiterhelfen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#33

AW: Liste der Exe-Pfade aller installierten Programme

  Alt 4. Jan 2013, 17:53
Bitte keine "Hilfe" mehr. Ich habe eine Lösung und poste sie später.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#34

AW: Liste der Exe-Pfade aller installierten Programme

  Alt 4. Jan 2013, 18:58
Ich möchte abfragen, ob Programme aus einer vorgegebenen eigenen Liste (welche durch keine Regel definiert ist) installiert sind, UND ich brauche deren Exe-Pfade.
Das schriebst du bereits, aber schlauer bin ich weiterhin nicht.

Zitat:
Die Art der Filterung stellt sicher, dass nur die Exes der Hauptprogramme gefunden werden.
Na da bin ich ja mal gespannt, wie und wonach du filtern willst...

MfG Dalai
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#35

AW: Liste der Exe-Pfade aller installierten Programme

  Alt 4. Jan 2013, 19:25
Das schriebst du bereits, aber schlauer bin ich weiterhin nicht.
Kann ich leider nichts dafür.

Na da bin ich ja mal gespannt, wie und wonach du filtern willst...
Achte auf deinen Blutdruck!

Aber vielen Dank vorerst mal an alle, die mir helfen wollten!
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#36

AW: Liste der Exe-Pfade aller installierten Programme

  Alt 5. Jan 2013, 00:55
Hier ist der Code:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, System.StrUtils,
  //CodeSiteLogging,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  JclSysInfo, JclFileUtils, JclShell;

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure DoCheckIfSomeProgramsAreInstalled(const slPrograms, slResults: TStringList);
var
  i, j: Integer;
  sCommonStartmenuFolder, sStartmenuFolder: string;
  slShortcuts: TStringList;
  ThisShellLinkRecord: JclShell.TShellLink;
  ThisTargetExePath: string;
begin
  sCommonStartmenuFolder := JclFileUtils.PathAddSeparator(JclSysInfo.GetCommonStartmenuFolder);
  sStartmenuFolder := JclFileUtils.PathAddSeparator(JclSysInfo.GetStartmenuFolder);

  slShortcuts := TStringList.Create;
  try
    JclFileUtils.AdvBuildFileList(sCommonStartmenuFolder + '*.lnk', faAnyFile, slShortcuts, amAny, [flFullNames, flRecursive]);
    JclFileUtils.AdvBuildFileList(sStartmenuFolder + '*.lnk', faAnyFile, slShortcuts, amAny, [flFullNames, flRecursive]);

    for i := 0 to slShortcuts.Count - 1 do
    begin
      for j := 0 to slPrograms.Count - 1 do
      begin
        if Pos(slPrograms[j], AnsiLowerCaseFileName(ExtractFileName(slShortcuts[i]))) > 0 then
        begin
          JclShell.ShellLinkResolve(slShortcuts[i], ThisShellLinkRecord);
          ThisTargetExePath := JclFileUtils.PathGetLongName(ThisShellLinkRecord.Target);
          if CompareText('.exe', ExtractFileExt(ThisTargetExePath)) = 0 then
          begin
            if Pos('unins', AnsiLowerCaseFileName(ExtractFileName(ThisTargetExePath))) = 0 then
              slResults.Add(ThisTargetExePath);
          end;
        end;
      end;
    end;
  finally
    slShortcuts.Free;
  end;
end;

procedure CheckIfTheseProgramsAreInstalled(const rgPrograms: array of string);
var
  i: Integer;
  slPrograms: TStringList;
  ProgramNames: string;
  slResults: TStringList;
begin
  slPrograms := TStringList.Create;
  slResults := TStringList.Create;
  try
    slResults.Sorted := True;
    slResults.Duplicates := dupIgnore;

    // ################################################
    if Length(rgPrograms) = 0 then
    begin
      // Load lowercase! program names:
      ProgramNames := PathAddSeparator(ExtractFilePath(Application.ExeName)) + 'ProgramNames.txt';
      slPrograms.LoadFromFile(ProgramNames);
    end
    else
    begin
      for i := Low(rgPrograms) to High(rgPrograms) do
        slPrograms.Add(rgPrograms[i]);
    end;
    // ################################################

    Screen.Cursor := crHourGlass;
    try
      DoCheckIfSomeProgramsAreInstalled(slPrograms, slResults);
    finally
      Screen.Cursor := crDefault;
    end;

    // Ergebnis ausgeben:
    //CodeSite.Send('slResults', slResults);
    slResults.SaveToFile(PathAddSeparator(ExtractFilePath(Application.ExeName)) + 'Results.txt');
  finally
    slPrograms.Free;
    slResults.Free;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Aufruf 1 (Laden der gesuchten Programme aus Textdatei):
  CheckIfTheseProgramsAreInstalled([]);

  // ODER Aufruf 2 (gesuchte Programme übergeben):
  CheckIfTheseProgramsAreInstalled([
    'irfanview',
    'snagit 11 editor',
    'gimp',
    'microsoft clip organizer',
    'paint.net',
    'photoscape',
    'portrait professional',
    'serif photoplus',
    'tineye',
    'xnview',
    'image analyzer'
                                   ]);
end;

end.
Ich prüfe damit, welche aus einer bestimmten Liste von Grafikprogrammen installiert sind. Die Suchstrings müssen lowercase sein und sind Teilstrings der Startmenüeinträge.

Bitte schickt mir auch die Suchstrings der Grafikprogramme, die bei euch installiert sind und die nicht in der Liste aufgezählt sind, damit ich bei möglichst vielen Endbenutzern prüfen kann, welche Grafikprogramme installiert sind. Danke!
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#37

AW: Liste der Exe-Pfade aller installierten Programme

  Alt 5. Jan 2013, 02:40
Kein Fehler, aber eine Vergesslichkeit, die auch ich immer wieder gerne mache

Delphi-Quellcode:
      for i := Low(rgPrograms) to High(rgPrograms) do
...
rgPrograms ist ein dynamischer Array, somit ist Low() eigentlich immer 0.

Zu der Routine. Ein anderer Ansatz den ich mal versuchte, war die installierten Programme zu einem Gebiet (also z. B. Grafik, Video, Sound, ...) über die Registry zu ermitteln. Um bei Grafikprogrammen zu bleiben, habe ich alle Endungen zu einem Gebiet (bmp, jpg, jpeg, gif, png, ...) aufgelistet und alle damit verbundenen Programme ermittelt. Zuerst über die Verknüpfung zu der Dateiendung. Da aber nicht unbedingt jedes Programm eine Verknüpfung zu einer Dateiendung besitzt, habe ich das mit der Liste der Programme komplettiert, die schon mal eine Datei mit einer der Dateiendungen geöffnet haben (Windows merkt sich solche Programme und vermerkt sie in der Registry). Die Liste war eigentlich sehr gut und hat sogar Programme gelistet an die man selbst nicht dachte.
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#38

AW: Liste der Exe-Pfade aller installierten Programme

  Alt 5. Jan 2013, 13:20
Wie kann man eine Liste der EXE-Pfade aller installierten Programme erhalten, sowohl 32bit als auch 64bit, XP bis W7? Also nicht die Liste der Displaynamen oder die Liste der Uninstall-Programme, sondern z.B.:

Zitat:
C:\Program Files (x86)\XYProgramm\XYProgramm.exe
Nur angezeigt oder auch passenden Quelltext dazu?

Nur anzeigen tut es z.B. das Program MyUnInstaller von Nirsoft. Leider liegen keine Quelltexte bei, die wären allerdings ohnehin in C(++).
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#39

AW: Liste der Exe-Pfade aller installierten Programme

  Alt 5. Jan 2013, 13:47
Nur anzeigen tut es z.B. das Program MyUnInstaller von Nirsoft. Leider liegen keine Quelltexte bei, die wären allerdings ohnehin in C(++).

Dem Laufzeitverhalten des Programms nach durchsucht es die Programmverzeichnisse und braucht dafür mehrer Minuten. Das dauert für meinen Zweck viel zu lange. Mein obiger Code erfüllt seinen Zweck in einer Zehntelsekunde! Außerdem macht das Nirsoft-Programm ganz was anderes und listet nicht die Pfade der ausführbaren Programm-Exe-Dateien auf, sondern nur die Installationsinformationen. Mein Code prüft, ob eine Reihe von Programmen installiert sind und liefert deren Exe-Pfade.
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#40

AW: Liste der Exe-Pfade aller installierten Programme

  Alt 5. Jan 2013, 14:05
rgPrograms ist ein dynamischer Array, somit ist Low() eigentlich immer 0.

Die richtige Bezeichnung lautet in diesem Fall "Open Array" und nicht "Dynamic Array". Einem dynamischen Array muss immer erst explizit mit SetLength Speicher zugewiesen werden. Im Falle eines offenen Arrays wird dies implizit durch den "Open Array Constructor" beim Aufruf erledigt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz