Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programmname aus .exe-Datei auslesen (https://www.delphipraxis.net/26248-programmname-aus-exe-datei-auslesen.html)

dopeline 20. Jul 2004 21:48


Programmname aus .exe-Datei auslesen
 
Hallo!

Ich möchte den Namen des Programmes aus einer .exe-Datei ermitteln. z.b. aus iexplorer.exe --> 'Internet Explorer' oder so

Ist das möglich?


Gruß, dopeline

Rackergen2 20. Jul 2004 22:00

Re: Programmname aus .exe-Datei auslesen
 
Bei guten Programmierern: <Rechtsklick>/Eigenschaften/Versionsinfo

Bei schlechten Programmierern wenn du Pech hast gar nicht...

Bei mittelmäßigen Programierern mit Bei Google suchenResHacker oder Bei Google suchenDisAssembler

Garfield 20. Jul 2004 22:23

Re: Programmname aus .exe-Datei auslesen
 
Zitat:

Zitat von Rackergen2
Bei guten Programmierern: <Rechtsklick>/Eigenschaften/Versionsinfo

Und wie führt ein Delphi-Programm einen Rechtsklick aus? :roll:

Ich denke, es ist etwas in der Richtung gemeint: http://www.delphipraxis.net/internal...ect.php?t=5616

Rackergen2 20. Jul 2004 23:03

Re: Programmname aus .exe-Datei auslesen
 
Ach ja, wir sind ja hier in Delphi... :oops:

Manzoni 21. Jul 2004 00:01

Re: Programmname aus .exe-Datei auslesen
 
hi,

evtl. meinst du ja auch ExtractFileName (Funktion) ?

dopeline 21. Jul 2004 00:13

Re: Programmname aus .exe-Datei auslesen
 
mit ExtractFileName bekomme ich ja nur den Dateinamen (ohne Pfad). ich möchte aber die "Programm-Bezeichnung" der (*.exe)Datei
z.b. aus 'winword.exe' soll 'Word 2003' oder 'MS Word 2003' ausgelesen werden. kann man das nicht vielleicht irgendwie über die registry regeln?


Gruß, dopeline

Rackergen2 21. Jul 2004 01:55

Re: Programmname aus .exe-Datei auslesen
 
Zitat:

Zitat von dopeline
kann man das nicht vielleicht irgendwie über die registry regeln?

Auf garantie nicht... Mir fällt nur ein, die Version auszulesen, aber wie, weiß ich nicht...

Nebenbei: Nicht jdrer benutzt Versions-Infos und die wenigsten hinterlegen irgend etwas in der Registry... Also ich würde es nicht wagen, schon alleine wegen der Weitergabe-Kompatibilität...

Sharky 21. Jul 2004 07:10

Re: Programmname aus .exe-Datei auslesen
 
Zitat:

Zitat von dopeline
...z.b. aus 'winword.exe' soll 'Word 2003' oder 'MS Word 2003' ausgelesen werden....

Hai dopeline,
was Du suchst ist Die FileDescription. Mit diesem Code von Sakura kannst Du das dann leicht machen wenn Du ihn minimal änderst.

Hier noch die Liste der Infos die Du auslesen kannst
Zitat:

Comments - InternalName - ProductName
CompanyName - LegalCopyright - ProductVersion
FileDescription - LegalTrademarks - PrivateBuild
FileVersion - OriginalFilename - SpecialBuild

Garfield 21. Jul 2004 07:26

Re: Programmname aus .exe-Datei auslesen
 
Zitat:

Zitat von Sharky
... Mit diesem Code von Sakura kannst Du das ...

Und genau der steht auch in der Code-Library. Siehe meinen Link oben. :|

Sharky 21. Jul 2004 07:28

Re: Programmname aus .exe-Datei auslesen
 
Zitat:

Zitat von Garfield
...Und genau der steht auch in der Code-Library. Siehe meinen Link oben. :|

:shock: Sorry Garfield,
ich hatte den Link von Dir total übersehen.

MathiasSimmack 21. Jul 2004 07:39

Re: Programmname aus .exe-Datei auslesen
 
Ich habe für ein eigenes Projekt sakuras Funktion leicht bearbeitet, damit sie mir nur das zurückliefert, was ich auch will bzw. brauche
Delphi-Quellcode:
//
// base code by sakura ([url]http://www.delphipraxis.net/post39547.html[/url])
//
function GetFileInfo(const FileName, BlockKey: string): string;
var
  vis,
  dummy        : dword;
  vi,
  translation,
  ip           : pointer;
begin
  Result       := '';
  vis          := GetFileVersionInfoSize(pchar(FileName),dummy);
  if(vis > 0) then
  begin
    GetMem(vi,vis);
    try
      GetFileVersionInfo(pchar(Filename),0,vis,vi);
      if(vi = nil) then exit;

      // get language code
      VerQueryValue(vi,'\\VarFileInfo\\Translation',translation,vis);
      if(translation = nil) then exit;

      VerQueryValue(vi,
        pchar(Format('\\StringFileInfo\\%.4x%.4x\\%s',
          [LOWORD(longint(translation^)),HIWORD(longint(translation^)),
          BlockKey])),ip,vis);
      if(ip = nil) then exit;

      SetString(Result,pchar(ip),vis);
    finally
      FreeMem(vi);
    end;
  end;
end;
bspw:
Delphi-Quellcode:
s  := GetFileInfo(paramstr(1),'FileDescription');
Das hatte ich bspw. hier benutzt.

Garfield 21. Jul 2004 12:00

Re: Programmname aus .exe-Datei auslesen
 
Fehlt in den Listings die Funktion GetFileVersionInfoSize?

Zitat:

Zitat von MathiasSimmack
vis := GetFileVersionInfoSize(pchar(FileName),dummy);


MathiasSimmack 21. Jul 2004 12:15

Re: Programmname aus .exe-Datei auslesen
 
Das ist eine [msdn:aaeaf0a2c1="GetFileVersionInfoSize"]API-Funktion[/msdn:aaeaf0a2c1] (Windows-Unit), die du übrigens auch im von dir zitierten Beispiel von sakura findest.

Garfield 21. Jul 2004 12:42

Re: Programmname aus .exe-Datei auslesen
 
:( Habe meinen Fehler gefunden. Hatte eine neue Unit genommen und die USES vergessen.

Nachtrag: Jetzt funktioniert es. InternalName und ProductVersion bekomme ich.

dopeline 21. Jul 2004 13:19

Re: Programmname aus .exe-Datei auslesen
 
Vielen Dank! Es funktioniert!

Gruß, dopeline

Garfield 21. Jul 2004 15:22

Re: Programmname aus .exe-Datei auslesen
 
Ist das in Ordnung, dass jedem String ein Steuerzeichen anhängt, welches den Rest der Zeile löscht?

Heißt, wenn ich (StringInternalName + StringProductVersion) - bzw umgekehrt - ausgeben lasse, wird immer nur der erste String ausgegeben. Erst nach Ausführung von TrimRight funktioniert es richtig.

franksch88 21. Jul 2004 15:32

Re: Programmname aus .exe-Datei auslesen
 
Vielleicht solltest du dir mal die VirtualShellTools angucken (bei www.mustangpeak.net)... Sind wirklich gute Explorer-like komponenten die dir fast alle shell funktionen erlauben. Da kommt eine Demo namens "Namespace Browser", wenn du sie dir anguckst, wirst du staunen wieviele Details du von einer Datei oder eines Ordners ermitteln kannst.. Attributes, File system, Compression, relative path, absolute path, icons, version, erstellungsdatum, größe, "PROGRAMM NAME", und sogar den Hilfe-Text was der explorer anzeigt (Zum Beispiel, bei Arbeitsplatz: "Zeigt die an diesen Computer angeschlossenen Laufwerke und Hardware an")

MathiasSimmack 21. Jul 2004 16:28

Re: Programmname aus .exe-Datei auslesen
 
Zitat:

Zitat von Garfield
Ist das in Ordnung, dass jedem String ein Steuerzeichen anhängt, welches den Rest der Zeile löscht?

Nein, in Ordnung ist das nicht. Es schadet zwar auch nicht, wenn die #0 am Ende dran hängt, aber wie du schon bemerkt hast: Wenn man zwei Strings miteinander verbinden will, dann wird alles nach der #0 natürlich ignoriert.

Das wäre das Indiz, dass die Funktion "VerQueryValue" als Puffergröße ein zusätzliches Zeichen zurückliefert. Wenn du von der Funktion redest, die ich auf der letzten Seite gepostet habe, dann ändere die Zeile
Delphi-Quellcode:
SetString(Result,pchar(ip),vis);
einfach in
Delphi-Quellcode:
SetString(Result,pchar(ip),vis - 1);
Klappt genauso, wie ich gerade ausprobiert habe, und löst das Problem. ;)

Garfield 21. Jul 2004 18:46

Re: Programmname aus .exe-Datei auslesen
 
Zitat:

Zitat von MathiasSimmack
Klappt genauso, wie ich gerade ausprobiert habe, und löst das Problem. ;)

:hello: Das Problem wäre gelöst. Damit läuft mein Testprogramm ordentlich.

Was ich allerdings nicht verstehe, ist, dass die Routine in meinem Programm mit Delphi 3 Prof unter Win98SE nicht will. Wenn der erste Wert in der INI geladen wird, gibt es eine Zugriffsverletzung. Denn beim Lesen des InternalName des Programmes wird nicht von

Code:
FreeMem(vi);
ans Ende der Procedure GetFileInfo sondern direkt ans Ende der Procedure INI_laden gesprungen. Unter WinXP tritt dieser Fehler nicht auf.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 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