Autor Beitrag
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 user profile iconTino: Topic aus Sonstiges verschoben am Di 08.02.2005 um 09:10

_________________
Ceterum censeo, microsoftem esse delendam.
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (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
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;
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.
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.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



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
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
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
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.
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Di 08.02.05 10:11 
Du kannst dir ja auch mal diesen FAQ Beitrag anschauen: ...Informationen über eine Datei ermitteln?

Gruß
Tino
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
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.
Jakane
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Mo 19.09.11 11:50 
Genau was ich gesucht habe, und funktioniert prima :D danke
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



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
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
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. ;-)

_________________
We are, we were and will not be.

Für diesen Beitrag haben gedankt: BenBE, Boldar
Jakane
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



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
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?