AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programmname aus .exe-Datei auslesen

Ein Thema von dopeline · begonnen am 20. Jul 2004 · letzter Beitrag vom 21. Jul 2004
Antwort Antwort
Seite 2 von 2     12   
MathiasSimmack
(Gast)

n/a Beiträge
 
#11

Re: Programmname aus .exe-Datei auslesen

  Alt 21. Jul 2004, 08:39
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:
s := GetFileInfo(paramstr(1),'FileDescription'); Das hatte ich bspw. hier benutzt.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#12

Re: Programmname aus .exe-Datei auslesen

  Alt 21. Jul 2004, 13:00
Fehlt in den Listings die Funktion GetFileVersionInfoSize?

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

n/a Beiträge
 
#13

Re: Programmname aus .exe-Datei auslesen

  Alt 21. Jul 2004, 13:15
Das ist eine [msdn:aaeaf0a2c1="GetFileVersionInfoSize"]API-Funktion[/msdn:aaeaf0a2c1] (Windows-Unit), die du übrigens auch im von dir zitierten Beispiel von sakura findest.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#14

Re: Programmname aus .exe-Datei auslesen

  Alt 21. Jul 2004, 13:42
Habe meinen Fehler gefunden. Hatte eine neue Unit genommen und die USES vergessen.

Nachtrag: Jetzt funktioniert es. InternalName und ProductVersion bekomme ich.
  Mit Zitat antworten Zitat
dopeline

Registriert seit: 7. Mär 2003
Ort: Berlin
304 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Programmname aus .exe-Datei auslesen

  Alt 21. Jul 2004, 14:19
Vielen Dank! Es funktioniert!

Gruß, dopeline
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#16

Re: Programmname aus .exe-Datei auslesen

  Alt 21. Jul 2004, 16:22
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.
  Mit Zitat antworten Zitat
franksch88

Registriert seit: 14. Jul 2004
Ort: Mainz
23 Beiträge
 
Delphi 7 Personal
 
#17

Re: Programmname aus .exe-Datei auslesen

  Alt 21. Jul 2004, 16:32
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")
xTr1m
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#18

Re: Programmname aus .exe-Datei auslesen

  Alt 21. Jul 2004, 17:28
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
SetString(Result,pchar(ip),vis); einfach in
SetString(Result,pchar(ip),vis - 1); Klappt genauso, wie ich gerade ausprobiert habe, und löst das Problem.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#19

Re: Programmname aus .exe-Datei auslesen

  Alt 21. Jul 2004, 19:46
Zitat von MathiasSimmack:
Klappt genauso, wie ich gerade ausprobiert habe, und löst das Problem.
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:34 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