Wie kann ich meine Versionsinformationen aus dem Projekt in meinem Startlogo anzeigen?
Announcement
Collapse
No announcement yet.
Versionsinformationen
Collapse
X
-
Hallo,<p>
das hier ist die Kopie vom Beitrag von NicoDE, den ich meinte ("Auslesen der eigenen Programmversion und Build#" unter Win32 API / Delphi):<p><p>
<PRE><TT><br>"<B>procedure</B> TForm1.Button1Click(Sender: TObject);<br><B>var</B><br> aFileName: <B>array</B> [0..MAX_PATH] <B>of</B> Char;<br> pdwHandle: DWORD;<br> nInfoSize: DWORD;<br> pFileInfo: Pointer;<br> pFixFInfo: PVSFixedFileInfo;<br> nFixFInfo: DWORD;<br> pVarFInfo: PChar;<br> nVarFInfo: DWORD;<br> nVarTrans: DWORD;<br> aVarFPath: <B>array</B> [0..MAX_PATH] <B>of</B> Char;<br><B>begin</B><br> GetModuleFileName(0, aFileName, MAX_PATH);<br> pdwHandle := 0;<br> nInfoSize := GetFileVersionInfoSize(aFileName, pdwHandle);<br> <B>if</B> nInfoSize <> 0 <B>then</B><br> pFileInfo := GetMemory(nInfoSize)<br> <B>else</B><br> pFileInfo := <B>nil</B>;<br> <B>if</B> Assigned(pFileInfo) <B>then</B><br> <B>try</B><br> <B>if</B> GetFileVersionInfo(aFileName, pdwHandle, nInfoSize, pFileInfo) <B>then</B><br> <B>begin</B><br> <FONT COLOR="#000080"><I>// den vordefinierten Info-Block holen, der in jeder</I></FONT><br> <FONT COLOR="#000080"><I>// Versionsinformation enthalten sein sollte.</I></FONT><br> pFixFInfo := <B>nil</B>;<br> nFixFInfo := 0;<br> <B>if</B> VerQueryValue(pFileInfo, <FONT COLOR="#0000FF">'\'</FONT>, Pointer(pFixFInfo), nFixFInfo) <B>then</B><br> <B>begin</B><br> <FONT COLOR="#000080"><I>// Bei von Delphi erzeugten Info-Blöcken sind die Dateiversion</I></FONT><br> <FONT COLOR="#000080"><I>// und die Produktversion im FixedInfo-Block immer gleich.</I></FONT><br> Label1.Caption := Format(<FONT COLOR="#0000FF">'Version (fix): %d.%d.%d.%d.'</FONT>,<br> [HiWord(pFixFInfo^.dwFileVersionMS),<br> LoWord(pFixFInfo^.dwFileVersionMS),<br> HiWord(pFixFInfo^.dwFileVersionLS),<br> LoWord(pFixFInfo^.dwFileVersionLS)]);<br> <B>end</B>;<br> <FONT COLOR="#000080"><I>// Erst die Sprache(n) ermitteln und dann abfragen</I></FONT><br> pVarFInfo := <B>nil</B>;<br> nVarFInfo := 0;<br> <B>if</B> VerQueryValue(pFileInfo, <FONT COLOR="#0000FF">'\VarFileInfo\Translation'</FONT>,<br> Pointer(pVarFInfo), nVarFInfo) <B>then</B><br> <B>begin</B><br> <FONT COLOR="#000080"><I>// erste Sprache holen</I></FONT><br> nVarTrans := HiWord(PDWORD(pVarFInfo)^)<br> <B>or</B> (Word(PDWORD(pVarFInfo)^) <B>shl</B> 16);<br> wvsprintf(aVarFPath, <FONT COLOR="#0000FF">'\StringFileInfo\%8.8x\'</FONT>, PChar(@nVarTrans));<br> <FONT COLOR="#000080"><I>// Standard-Wert 'Dateiversion' abfragen</I></FONT><br> <FONT COLOR="#000080"><I>// (Standardisierte Werte sind: CompanyName FileDescription FileVersion</I></FONT><br> <FONT COLOR="#000080"><I>// InternalName LegalCopyright OriginalFilename ProductName</I></FONT><br> <FONT COLOR="#000080"><I>// ProductVersion - wobei diese für alle Sprachen gelten)</I></FONT><br> lstrcat(aVarFPath, <FONT COLOR="#0000FF">'FileVersion'</FONT>);<br> pVarFInfo := <B>nil</B>;<br> nVarFInfo := 0;<br> <B>if</B> VerQueryValue(pFileInfo, aVarFPath, Pointer(pVarFInfo), nVarFInfo) <B>then</B><br> <B>begin</B><br> Label2.Caption := <FONT COLOR="#0000FF">'Dateiversion (var): '</FONT> + TCaption(pVarFInfo);<br> <B>end</B>;<br> <B>end</B>;<br> <B>end</B>;<br> <B>finally</B><br> FreeMemory(pFileInfo);<br> <B>end</B>;<br><B>end</B>;<br></TT></PRE><p>
Grundsätzlich gibt es also mindestens einen festdefinierten Infoblock, den man erfragen kann (deren Werte in Delphi im Optionen-Dialog in der oberen Hälfte eingestellt werden).<br>
Und es gibt eine Liste von Info-Blöcken in verschiedenen Sprachen, die in einer Tabelle stehen (der untere Teil des Dialogs - wobei Delphi nur einen Sprachenblock anlegen
Comment
Comment