![]() |
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 20:53 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