Versionsinfo auslesen
spacer
Autor Nachricht
simplex3
Hält's aus hier
Beiträge: 14

Win 98, Win 2000, Linux
D7.1 Prof, D8 Prof
BeitragVerfasst: Fr 04.02.05 20:22 
Moin.
Kann ich irgendwie die Informationen, die ich unter Projekt|Optionen|Versionsinfo eingegeben habe [speziell: Dateiversion und Produktversion] aus dem Programm selbst heraus auslesen?

Wahrscheinlich mal wieder gaaaanz einfach...
Schon mal prophylaktisch :oops:


Moderiert von Tino: Topic aus Sonstiges verschoben am Di 08.02.2005 um 09:10

_________________
Ceterum censeo, microsoftem esse delendam.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Co-Administrator
Beiträge: 5313
Erhaltene Danke: 54

Windows 7 , Server 2008 R2
D7 Pro, VS.NET 2010 (C#)
BeitragVerfasst: Fr 04.02.05 20:25 
Ja, diese Funktion hab ich irgendwo mal gefunden, weiß aber nimmer woher:
ausblenden volle Höhe Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
function getversion(datei: String):string;
type
  thilo=record
    case integer of
      0: (all:dword);
      1: (lo:word;hi:word);
    end;
var buffer:pointer;
    dummy:cardinal;
    size:cardinal;
    p:pointer;
    data:^vs_FIXEDFILEINFO;
    hilo:thilo;
begin
  result:=''
  size:=getfileversioninfosize(pchar(datei),dummy);
  getmem(buffer,size);
  if not getfileversioninfo(pchar(application.exename),0,size,buffer) then
  begin
    result := 'Nix eingetragen';
    exit; 
  end;
  p:=nil
  if not verqueryvalue(buffer,pchar(''),p,size) then
  begin
    result := 'Nix eingetragen';
    exit; 
  end;
  data:=p;
  hilo.all:=data^.dwFileVersionms;
  result:=inttostr(hilo.hi);
  result:=result+'.'+inttostr(hilo.lo);
  hilo.all:=data^.dwFileVersionls;
  result:=result+'.'+inttostr(hilo.hi);
  result:=result+'.'+inttostr(hilo.lo);
  freemem(buffer);
end;
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
simplex3 Threadstarter
Hält's aus hier
Beiträge: 14

Win 98, Win 2000, Linux
D7.1 Prof, D8 Prof
BeitragVerfasst: Fr 04.02.05 20:31 
Fein. Teste ich gleich mal...

_________________
Ceterum censeo, microsoftem esse delendam.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
simplex3 Threadstarter
Hält's aus hier
Beiträge: 14

Win 98, Win 2000, Linux
D7.1 Prof, D8 Prof
BeitragVerfasst: Fr 04.02.05 20:39 
Das geht schon mal hervorragend.
Mal sehen, ob ich auch noch dahinter komme wie man die Produktinfo auslesen kann. :)
Danke!

_________________
Ceterum censeo, microsoftem esse delendam.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
MathiasSimmack
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4093
Erhaltene Danke: 1


SharpDevelop 4
BeitragVerfasst: Fr 04.02.05 22:38 
Was verstehst du unter Produktinfos? Ach so, vermutlich die Sachen wie Copyright, Firma, usw. Dann versuch´s mal damit:
ausblenden volle Höhe Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
function GetFileInfo(const FileName, BlockKey: string): string;
var
  vis,
  dummy         : dword;
  vi,
  translation,
  ip            : pointer;
begin
  Result        := '';
  vis           := GetFileVersionInfoSize(pchar(FileName),dummy);
  if(vis > 0then
  begin
    GetMem(vi,vis);
    try
      GetFileVersionInfo(pchar(Filename),0,vis,vi);
      if(vi = nilthen exit;

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

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

      SetString(Result,pchar(ip),vis - 1);
    finally
      FreeMem(vi);
    end;
  end;
end;

Aufzurufen mit dem Dateinamen und dem Namen des "Blocks", den du auslesen willst
ausblenden Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
CompanyName
FileDescription
FileVersion
InternalName
LegalCopyright
OriginalFilename
ProductName
ProductVersion

Die Funktion stammt im Grundcode von sakura. Ich habe sie nur für meine Zwecke bearbeitet.

Für diesen Beitrag haben gedankt: Jakane
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
simplex3 Threadstarter
Hält's aus hier
Beiträge: 14

Win 98, Win 2000, Linux
D7.1 Prof, D8 Prof
BeitragVerfasst: Mo 07.02.05 13:14 
Vielen Dank!
Hat geholfen.

_________________
Ceterum censeo, microsoftem esse delendam.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Veteran
Beiträge: 9838
Erhaltene Danke: 42

Win 2000/XP/Vista/7
Delphi 2007
BeitragVerfasst: Di 08.02.05 10:11 
Du kannst dir ja auch mal diesen FAQ Beitrag anschauen: ...Informationen über eine Datei ermitteln?

Gruß
Tino
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
TimonWorld
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 397



BeitragVerfasst: Do 03.03.05 19:55 
MathiasSimmack hat folgendes geschrieben:
ausblenden volle Höhe Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
function GetFileInfo(const FileName, BlockKey: string): string;
var
  vis,
  dummy         : dword;
  vi,
  translation,
  ip            : pointer;
begin
  Result        := '';
  vis           := GetFileVersionInfoSize(pchar(FileName),dummy);
  if(vis > 0then
  begin
    GetMem(vi,vis);
    try
      GetFileVersionInfo(pchar(Filename),0,vis,vi);
      if(vi = nilthen exit;

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

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

      SetString(Result,pchar(ip),vis - 1);
    finally
      FreeMem(vi);
    end;
  end;
end;


Bei der Funktion ist nur ein kleines Problem: Am Ende des Ausgabe-Strings werden bei mir 3 Zeichen mit dem ANSI-Wert #0 am Ende ausgegeben! Daher klappt es leider nicht, wenn ich mehrere Strings hintereinander setzen will.

Ich glaub aber das liegt an der PCharZuString-Konvertierung. Kann man aber die drei #0's nicht vermeiden?

Gruß,
Timon.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Jakane
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73



BeitragVerfasst: Mo 19.09.11 11:50 
Genau was ich gesucht habe, und funktioniert prima :D danke
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Luckie
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 11803
Erhaltene Danke: 146

WindowsXP Professional SP2
BDS2006, VS C++ Express, Eclipse (Java), Flex (Flash, AS)
BeitragVerfasst: Mo 19.09.11 15:21 
user profile iconTimonWorld hat folgendes geschrieben Zum zitierten Posting springen:
Kann man aber die drei #0's nicht vermeiden?

Trim

_________________
Gruß Michael
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator
Beiträge: 8118
Erhaltene Danke: 251

Win XP, Win 7
D7 PE, RAD Studio 2009 Professional
BeitragVerfasst: Mo 19.09.11 15:25 
@Luckie: Ich glaube, weitere Antworten auf die Frage (abgesehen von "Danke, klappt prima"), sind nach 6 Jahren nicht mehr unbedingt nötig. ;-)

_________________
Oel ngati kameie.

Für diesen Beitrag haben gedankt: BenBE, Boldar
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Jakane
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73



BeitragVerfasst: Fr 30.09.11 11:39 
Eigendlich war da noch eine Frage mit drin :lol:

Aufzurufen mit dem Dateinamen und dem Namen des "Blocks", den du auslesen willst
ausblenden Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
CompanyName
FileDescription
FileVersion
InternalName
LegalCopyright
OriginalFilename
ProductName
ProductVersion


Unter den Versionsinfos kann man auch Komentare einstellen, gibt es auch einen BlockKey um das auszulesen?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home