![]() |
Versionsinfo automatisch ins Programm übernehmen
Hi, noch ne Frage!
Wenn ich bei meinem Projekt bei den Projektopitionen unter Versionsinfo einen neuen Wert eingebe, kann ich dann im Programm irgendwie darauf zugreifen, so dass dann im Programm bei Version auch dieser Wert steht, damit ich nicht immer manuell die Versionsinfo eintragen muß? Wenn ja, wie kann ich das anstellen? |
Hi m-werk,
in folgendem Thread habe ich mal ein Beispiel dafür gegeben. Vielleicht hilfts weiter ;) ![]() |
Einfach kopieren und ohne nachdenken benutzen:
Code:
function GetFileVersionsString(const p_sFilepath : string) : string;
const // Das Ergebnis soll ja nett formatiert sein :) sFixVerFormat = 'Fileversion: %d.%d.%d.%d / Productversion: %d.%d.%d.%d'; var dwVersionSize : DWord; // Buffer für die Grösse der Versionsinfo der abgefragten Datei dwDummy : DWord; // Dummy, Wert wird nicht benötigt pVerBuf : Pointer; // Buffer für die Versionsdaten pFixBuf : PVSFixedFileInfo; // Buffer für die Versionsinfo fester Länge sReqdInfo : string; // Hier kommt rein, welcher Teil der Versionsinfo abgefragt werden soll begin // Annahme: Die Datei hat keine Versionsinfo Result := Format(sFixVerFormat,[0,0,0,0,0,0,0,0]); dwDummy := 0; // Dummy initialisieren sReqdInfo := '\'; // Es soll die Versionsinfo fester Länge abgefragt werden // Mal sehen, wieviel Platz die Versionsinfo der Datei braucht dwVersionSize := GetFileVersionInfoSize(PChar(p_sFilepath),dwDummy); if dwVersionSize > 0 then begin // Wenn > 0, dann Versionsinfo vorhanden try pVerBuf := AllocMem(dwVersionSize); // Buffer initialisieren // Gesamte Versionsinformationen auslesen if GetFileVersionInfo(PChar(p_sFilepath),0,dwVersionSize,pVerBuf) then begin // Werte für Versionsinfo fester Länge extrahieren if VerQueryValue(pVerBuf,PChar(sReqdInfo),Pointer(pFixBuf),dwDummy) then begin // und als Ergebnis ausgeben Result := Format(sFixVerFormat,[ (pFixBuf^.dwFileVersionMS and $FFFF0000) shr 16, // 1. Stelle HiWord, deshalb nach unten schieben pFixBuf^.dwFileVersionMS and $0000FFFF, (pFixBuf^.dwFileVersionLS and $FFFF0000) shr 16, pFixBuf^.dwFileVersionLS and $0000FFFF, (pFixBuf^.dwProductVersionMS and $FFFF0000) shr 16, pFixBuf^.dwProductVersionMS and $0000FFFF, (pFixBuf^.dwProductVersionLS and $FFFF0000) shr 16, pFixBuf^.dwProductVersionLS and $0000FFFF ]); end; end; finally // Resourcen wieder freigeben FreeMem(pVerBuf,dwVersionSize); end; end; end; |
Zitat:
Zitat:
Code:
Aber es spricht ja nichts dagegen, die Felder zu entfernen, die du höchstwahrscheinlich nicht brauchst. Als Vorschlag:
Fileversion: 3.0.0.13 / Productversion: 3.0.0.0
Code:
Damit liefert die selbe Funktion nur noch die Dateiversion als String zurück.
[b]const[/b] [i]// Das Ergebnis bleibt nett ;o)[/i]
sFixVerFormat = '%d.%d.%d.%d'; [i]{ ... } // und als Ergebnis ausgeben [/i] Result := Format(sFixVerFormat,[ (pFixBuf^.dwFileVersionMS [b]and[/b] $FFFF0000) [b]shr[/b] 16, pFixBuf^.dwFileVersionMS [b]and[/b] $0000FFFF, (pFixBuf^.dwFileVersionLS [b]and[/b] $FFFF0000) [b]shr[/b] 16, pFixBuf^.dwFileVersionLS [b]and[/b] $0000FFFF]); Zitat:
In diesem Sinne, das letzte Wort hat Luckie: Zitat:
|
Moin Luckie,
der Code kommt mir so bekannt vor :mrgreen: @m-werk: Du musst doch nur die Funktion kopieren und aufrufen:
Code:
fertig.
Label.Caption := GetFileVersionsString(paramstr(0));
Sollte Dir das Ergebnis zu lang sein, dann schau Dir doch mal die Hilfe zu der Funktion Format an. Damit sollte es dann hinzubekommen sein, in der Funktion GetFileVerionsString den Rückgabewert auf das gewünscht Mass zu reduzieren. |
Interessant. Jetzt ist meine Antwort vor m-werks Posting.
Ich bin ein Hellseher. :twisted: Daniel, Forum reparieren! <Edit> @Chris: Ätsch, ich war schneller ... und auch gehässiger ... :wink: </Edit> |
Dies ist leider einer der Threads, die von der Zeitumstellung des Servers betroffen sind. Durch die zweimalige Zeitumstellung sind die Beiträge jetzt in der falschen Reihenfolge. Da kann ich leider nichts machen; ab morgen früh (04:00 Uhr) wird wieder alles im Lot sein. (Dafür haben wir derzeit Beiträge aus der Zukunft :wink:)
Sorry, Daniel Delphi-PRAXiS Administrator |
Moin Mathias,
Code:
wenn mich die Software nicht am Posten gehindert hätte... :cry: :mrgreen:
Ätsch, ich war schneller ...
Zitat:
|
Zitat:
Fassen wir zusammen, damit der Gag erhalten bleibt: Zitat:
Zitat:
Zitat:
@Chris: nicht traurig sein. Ich wurde letztens als "Herr der großen Worte" bezeichnet. :wink: |
Das hier Beiträge etwas durcheinander geraten sind, liegt wohl daran, dass sie es bei 1&1 jetzt endlich geschafft haben den Pendel wieder in gang zu bekommen, die Feder aufzuziehen und das Glöcken neu zu stimmen.
Es geht nun mal nicht mit einem Einzeiler. Lager das ganze in eine Unit aus und du siehst es nicht mehr. Hat noch den Vorteil, dass du beim nächsten Projekt diese Unit wiederverwenden kannst. @Christian: Öhm, ja kann sein, dass sie von dir ist. Ich sammele solche Codeschnipsel, um sie bei Bedarf zur Hand zu haben ohne lange online in diversen Foren suchen zu müssen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz