Delphi-PRAXiS
Seite 1 von 6  1 23     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)

Chrischi 8. Aug 2008 17:58


Programmpfad anderer Programme ermitteln
 
Hallo,

ich möchte in einem meiner Programme den Programmpfad eines anderen Programms ermitteln. Das Programm ist nicht nur für mich gedacht, es ist also auch keine Lösung, das Programm auf meiner Festplatte zu suchen, da ich stark bezweifle, dass jeder seine Programme genau da gespeichert hat, wo ich sie habe.

Die SuFu dieses Forums hat mir nicht wirklich geholfen. Ich habe lediglich herausgefunden, dass man den Pfad in der Registry herausfinden kann: HKEY_LOCAL_MASCHINE -> SOFTWARE -> Mircosoft -> Windows -> CurrentVersion -> Uninstall. Der Name des Wertes, der den Programmpfad angibt, lautet "InstallLocation".

Doch, wie greife ich jetzt auf die Registry zu, bzw. wie lese ich "InstallLocation" mithilfe von Delphi aus?

Danke schon mal für die Antworten!

Gruß,
Chrischi

HalloDu 8. Aug 2008 18:01

Re: Programmpfad anderer Programme ermitteln
 
Schau dir mal die Delphi Hilfe zu TRegistry an.

Andreas L. 8. Aug 2008 18:15

Re: Programmpfad anderer Programme ermitteln
 
Delphi-Quellcode:
uses ..., Registry;

...
...

function GetPath:String;
var
  reg: tregistry;
begin
  Result := '';
  reg := Tregistry.create;
  reg.root := HKEY_LOCAL_MACHINE;
  if reg.openkeyreadonly('Software\Microsoft\Windows\CurrentVersion\Uninstall\DEINAPPNAME') then
  begin
    Result := reg.readstring('InstallLocation');
  end;
  reg.free;
end;
So z. B. ;-)

DeddyH 8. Aug 2008 18:21

Re: Programmpfad anderer Programme ermitteln
 
Wenn, dann bitte so:
Delphi-Quellcode:
uses ..., Registry;

...
...

function GetPath:String;
var
  reg: tregistry;
begin
  Result := '';
  reg := Tregistry.create;
  try
    reg.root := HKEY_LOCAL_MACHINE;
    if reg.openkeyreadonly('Software\Microsoft\Windows\CurrentVersion\Uninstall\DEINAPPNAME') then
    begin
      Result := reg.readstring('InstallLocation');
    end;
  finally
    reg.free;
  end;
end;

Chrischi 8. Aug 2008 18:30

Re: Programmpfad anderer Programme ermitteln
 
Danke für die schnellen Antworten! :thumb:

Jedoch ein Problem:
Code:
function GetPath:String;
var
  reg: tregistry;
begin
  Result := '';
  reg := Tregistry.create;
  try
    reg.root := HKEY_LOCAL_MACHINE;
    if reg.openkeyreadonly('Software\Microsoft\Windows\CurrentVersion\Uninstall\Mozilla Firefox (3.0.1)') then
    begin
      Result := reg.readstring('InstallLocation');
    end;
  finally
    reg.free;
  end;
end;
Soweit schön und gut, aber beim Ausführen kommt folgende Meldung:
Code:
[Fehler] Unit1.pas(31): E2003 Undefinierter Bezeichner: 'root'

bigben37 8. Aug 2008 18:39

Re: Programmpfad anderer Programme ermitteln
 
Das muss

Delphi-Quellcode:
reg.RootKey := HKEY_LOCAL_MACHINE;
heißen.

DeddyH 8. Aug 2008 18:44

Re: Programmpfad anderer Programme ermitteln
 
Jepp, Sch... C&P :mrgreen:

Chrischi 8. Aug 2008 18:46

Re: Programmpfad anderer Programme ermitteln
 
Klappt, super, danke!

Letzte Frage: Nehmen wir mal an, das Programm soll den Pfad von Firefox ermitteln. Nun gibt es aber verschiedene Versionen. Bei mir steht "Mozilla Firefox (3.0.1)" in der Registry. Was aber, wenn andere User eine andere Version haben? Gibt es so etwas wie einen >Platzhalter<?

toms 8. Aug 2008 19:25

Re: Programmpfad anderer Programme ermitteln
 
Zitat:

Zitat von Chrischi
Klappt, super, danke!

Letzte Frage: Nehmen wir mal an, das Programm soll den Pfad von Firefox ermitteln. Nun gibt es aber verschiedene Versionen. Bei mir steht "Mozilla Firefox (3.0.1)" in der Registry. Was aber, wenn andere User eine andere Version haben? Gibt es so etwas wie einen >Platzhalter<?

Durchlaufe einfach alle Keys und überprüfe mit POS, ob der String 'Mozilla Firefox' enthalten ist.
Ein Beispiel zu GetKeyNames - das jedoch abgeändert muss - findest du hier.

Chrischi 8. Aug 2008 19:35

Re: Programmpfad anderer Programme ermitteln
 
Was genau muss ich da ändern?

Wenn ichs so versuche zu starten, kommen folgende Meldungen:
Code:
[Fehler] Unit1.pas(36): E2003 Undefinierter Bezeichner: 'TlistItem'
[Fehler] Unit1.pas(52): E2003 Undefinierter Bezeichner: 'ListView1'
[Fehler] Unit1.pas(54): E2003 Undefinierter Bezeichner: 'BeginUpdate'
[Fehler] Unit1.pas(55): E2003 Undefinierter Bezeichner: 'Clear'
[Fehler] Unit1.pas(70): E2003 Undefinierter Bezeichner: 'Add'
[Fehler] Unit1.pas(71): E2066 Operator oder Semikolon fehlt
[Fehler] Unit1.pas(72): E2066 Operator oder Semikolon fehlt
[Fehler] Unit1.pas(82): E2066 Operator oder Semikolon fehlt
[Fehler] Unit1.pas(83): E2003 Undefinierter Bezeichner: 'EndUpdate'
[Fataler Fehler] Project1.dpr(5): F2063 Verwendete Unit 'Unit1.pas' kann nicht compiliert werden


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:18 Uhr.
Seite 1 von 6  1 23     Letzte »    

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