Autor |
Beitrag |
simplex3
Hält's aus hier
Beiträge: 14
Win 98, Win 2000, Linux
D7.1 Prof, D8 Prof
|
Verfasst: 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.
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Fr 04.02.05 20:25
Ja, diese Funktion hab ich irgendwo mal gefunden, weiß aber nimmer woher:
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 
Hält's aus hier
Beiträge: 14
Win 98, Win 2000, Linux
D7.1 Prof, D8 Prof
|
Verfasst: Fr 04.02.05 20:31
Fein. Teste ich gleich mal...
_________________ Ceterum censeo, microsoftem esse delendam.
|
|
simplex3 
Hält's aus hier
Beiträge: 14
Win 98, Win 2000, Linux
D7.1 Prof, D8 Prof
|
Verfasst: 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
|
Verfasst: 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:
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 > 0) then begin GetMem(vi,vis); try GetFileVersionInfo(pchar(Filename),0,vis,vi); if(vi = nil) then exit;
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 - 1); finally FreeMem(vi); end; end; end; |
Aufzurufen mit dem Dateinamen und dem Namen des "Blocks", den du auslesen willst
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 
Hält's aus hier
Beiträge: 14
Win 98, Win 2000, Linux
D7.1 Prof, D8 Prof
|
Verfasst: Mo 07.02.05 13:14
Vielen Dank!
Hat geholfen.
_________________ Ceterum censeo, microsoftem esse delendam.
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Di 08.02.05 10:11
Du kannst dir ja auch mal diesen FAQ Beitrag anschauen: ...Informationen über eine Datei ermitteln?
Gruß
Tino
|
|
TimonWorld
      
Beiträge: 397
|
Verfasst: Do 03.03.05 19:55
MathiasSimmack hat folgendes geschrieben: | 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 > 0) then begin GetMem(vi,vis); try GetFileVersionInfo(pchar(Filename),0,vis,vi); if(vi = nil) then exit;
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 - 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
      
Beiträge: 257
|
Verfasst: Mo 19.09.11 11:50
Genau was ich gesucht habe, und funktioniert prima  danke
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 19.09.11 15:21
TimonWorld hat folgendes geschrieben : | Kann man aber die drei #0's nicht vermeiden? |
Trim
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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
      
Beiträge: 257
|
Verfasst: Fr 30.09.11 11:39
Eigendlich war da noch eine Frage mit drin
Aufzurufen mit dem Dateinamen und dem Namen des "Blocks", den du auslesen willst
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?
|
|
|