![]() |
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 |
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 ![]() ![]() |
Re: Programmname aus .exe-Datei auslesen
Zitat:
Ich denke, es ist etwas in der Richtung gemeint: ![]() |
Re: Programmname aus .exe-Datei auslesen
Ach ja, wir sind ja hier in Delphi... :oops:
|
Re: Programmname aus .exe-Datei auslesen
hi,
evtl. meinst du ja auch ExtractFileName (Funktion) ? |
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 |
Re: Programmname aus .exe-Datei auslesen
Zitat:
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... |
Re: Programmname aus .exe-Datei auslesen
Zitat:
was Du suchst ist Die FileDescription. Mit diesem ![]() Hier noch die Liste der Infos die Du auslesen kannst Zitat:
|
Re: Programmname aus .exe-Datei auslesen
Zitat:
|
Re: Programmname aus .exe-Datei auslesen
Zitat:
ich hatte den Link von Dir total übersehen. |
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:
bspw:
//
// 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;
Delphi-Quellcode:
Das hatte ich bspw.
s := GetFileInfo(paramstr(1),'FileDescription');
![]() |
Re: Programmname aus .exe-Datei auslesen
Fehlt in den Listings die Funktion GetFileVersionInfoSize?
Zitat:
|
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.
|
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. |
Re: Programmname aus .exe-Datei auslesen
Vielen Dank! Es funktioniert!
Gruß, dopeline |
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. |
Re: Programmname aus .exe-Datei auslesen
Vielleicht solltest du dir mal die VirtualShellTools angucken (bei
![]() |
Re: Programmname aus .exe-Datei auslesen
Zitat:
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:
einfach in
SetString(Result,pchar(ip),vis);
Delphi-Quellcode:
Klappt genauso, wie ich gerade ausprobiert habe, und löst das Problem. ;)
SetString(Result,pchar(ip),vis - 1);
|
Re: Programmname aus .exe-Datei auslesen
Zitat:
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:
ans Ende der Procedure GetFileInfo sondern direkt ans Ende der Procedure INI_laden gesprungen. Unter WinXP tritt dieser Fehler nicht auf.
FreeMem(vi);
|
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