Lecture du numéro de version de l'application

Soyez le premier à donner votre avis sur cette source.

Vue 4 652 fois - Téléchargée 246 fois

Description

Voici une petite fonction qui lit le numéro de version de votre application.
Pour que votre application contienne un numéro de version il faut aller dans Menu Projet\Options... puis dans l'onglet 'Informations de Version' cocher la case 'Inclure les informations de version dans le projet'

Ce numéro apparaît aussi dans l'explorateur windows par un click droit sur votre application puis Propriétés\Onglet version.

--- Nono du Moulin ---

Source / Exemple :


Function LectureVersion:String;
Var
  S         : String;
  Taille    : DWord;
  Buffer    : PChar;
  VersionPC : PChar;
  VersionL  : DWord;

Begin
  Result:='';
  {--- On demande la taille des informations sur l'application ---}
  S := Application.ExeName;
  Taille := GetFileVersionInfoSize(PChar(S), Taille);
  If Taille>0
  Then Try
  {--- Réservation en mémoire d'une zone de la taille voulue ---}
    Buffer := AllocMem(Taille);
  {--- Copie dans le buffer des informations ---}
    GetFileVersionInfo(PChar(S), 0, Taille, Buffer);
  {--- Recherche de l'information de version ---}
    If VerQueryValue(Buffer, PChar('\StringFileInfo\040C04E4\FileVersion'), Pointer(VersionPC), VersionL)
      Then Result:=VersionPC;
  Finally
    FreeMem(Buffer, Taille);
  End;
End;

Conclusion :


P.S. J'ai écrit cette procédure car celle dans l'aide de Delphi ne fonctionne pas sans modifications, du moins par sur mon poste. Quelqu'un a-t-il eu le même problème ?

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_bib34690
Messages postés
22
Date d'inscription
mardi 5 août 2003
Statut
Membre
Dernière intervention
10 mai 2011
-
Voila mon nouveau code :
Function LectureVersion(FileName:String):String;

Var
Handle : DWord;
Info : Pointer;
InfoData : Pointer;
InfoSize : LongInt;
DataLen : UInt;
LangPtr : Pointer;
InfoType : string;

Begin
Result:='';
//--- On demande la taille necessaire pour stocker les infos
InfoSize:= GetFileVersionInfoSize(PChar(FileName), Handle);
If (InfoSize>0) Then begin
//--- Réservation en mémoire d'une zone de la taille voulue ---
GetMem(Info, InfoSize);
try
//--- Copie dans le buffer des informations ---
InfoType:='FileVersion';
if GetFileVersionInfo(PChar(FileName), Handle, InfoSize, Info) then begin
if VerQueryValue(Info,'\VarFileInfo\Translation',LangPtr, DataLen) then
InfoType:=Format('\StringFileInfo\%0.4x%0.4x\%s'#0,[LoWord(LongInt(LangPtr^)),
HiWord(LongInt(LangPtr^)), InfoType]);
if VerQueryValue(Info,PChar(InfoType),InfoData,Datalen) then
Result:=strPas(InfoData);
end;
Finally
FreeMem(Info, InfoSize);
End;
End;
End;

Merci au forim developpez.com ou j'ai trouvé la solution que j'ai adaptée au code ci-dessus.
cs_bib34690
Messages postés
22
Date d'inscription
mardi 5 août 2003
Statut
Membre
Dernière intervention
10 mai 2011
-
ça marche avec n'importe quel prog. si on remplace S par File Info passé en param.

... j'ai entretemps trouvé la solution que je publierai dès que j'aurais fini de la tester...c'est un problème de langue...
le code ci-dessus ne marche que si le programme est de type "Français"
Winword et Excel sont compilés avec pour langue "langue neutre" ???...sacré bilou !
Il faut donc "trasncrire" 'FileVersion' en fonction de la langue du fichier.
@ + pour la soluce.
jmp77
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
4 -
Hello,

Ca ne fonctionne qu'avec l'exe que tu as compilé.

++,
JMP77.
cs_bib34690
Messages postés
22
Date d'inscription
mardi 5 août 2003
Statut
Membre
Dernière intervention
10 mai 2011
-
Bonjour,

Il semble que ce code ne marche pas pour certains EXE, comme Winword.exe ou Excel.exe, alors que ces informations sont visibles si on fait un clic droit sur le fichier.
quelqu'un aurait-il une soluce ?
Merci.
jmp77
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
4 -
PS : cette source mérite un bon 10/10 pour moi.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.