IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

[Débutant] Info projet [FAQ]


Sujet :

C++Builder

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 2
    Par défaut [Débutant] Info projet
    Comment récupérer les information du projet stockée dans Projet->option->info de version ?

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 58
    Par défaut
    Hello,

    Voila le constructeur d'une AboutBox qui met a jour automatiquement le numéro de version (affiché dans le TLabel Version) au moment de l'exécution (les commentaires expliquent comment sortir les autres infos au besoin)

    Il y a bcp de commentaires, mais vu que l'aide de la fonction API correspondante est claire comme du jus de chique, ca fait pas de mal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    38
    39
    40
    41
    42
    43
    44
    45
    __fastcall TAboutBox::TAboutBox(TComponent* AOwner)
    	: TForm(AOwner)
    {
      DWORD handle; /* Ne sert a rien, mais nécessaire... no comment :) */
      UINT size = GetFileVersionInfoSize(Application->ExeName.c_str(), &handle);
     
      //On alloue une zone de size octets et on appelle ensuite la fonction GetFileVersionInfo :
     
      BYTE *pData = new char[size];
      GetFileVersionInfo(Application->ExeName.c_str(), handle, size, pData);
     
      /*GetFileVersionInfo copie des informations de version (size octets) dans la zone pointée par pData. Elle renvoie une valeur différente de zéro en cas de réussite.
      Pour analyser ces informations de version, il faut exécuter VerQueryValue (et même l'exécuter deux fois) :
      ----[ BOOL VerQueryValue(lpvBlock, lpszSubBlock, lplpBuffer, lpcb); ]----
      Le premier argument de VerQueryValue est un pointeur sur le bloc rempli par GetFileVersionInfo (pData ici). Le deuxième argument est l'information de version recherchée (par exemple le nom de la société ou le numéro de version),
      le troisième argument est l'adresse d'un pointeur sur la zone qui devra recevoir l'information recherchée et le dernier argument un pointeur sur un entier dans lequel VerQueryValue copie le nombre de caractères copiés dans la zone qui vient d'être mentionnée.
      Pour pouvoir spécifier l'information recherchée, il faudra spécifier, en hexa, la paire langID/charset utilisée par le programme (langue d'install de Windows).
      Pour retrouver la paire en question, on écrit (le deuxième argument de VerQueryValue doit être repris tel quel) :*/
     
      VS_FIXEDFILEINFO* lpvi;
      UINT iLen;
     
     
      int n = VerQueryValue(pData, "\\VarFileInfo\\Translation", (void **) &lpvi, &iLen);
      translation = *(TRANSLATION*)lpvi;
     
      /*VerQueryValue renvoie une valeur différente de zéro si l'information existe.
        Maintenant que nous avons la paire langID/charset, nous pouvons former la chaîne relative à l'information réclamée. Celle-ci doit être de la forme
        \StringFileInfo\lang-charset\string-name. StringFileInfo doit être repris tel quel.
        lang-char est la représentation hexadécimale des deux champs de la variable structurée translation présentée ci-dessus.
        string-name permet de spécifier l'information de version recherchée : Comments (pour les commentaires), CompanyName (pour le nom de l'organisation),
        FileDescription (description), FileVersion (version de fichier), InternalName (nom interne), LegalCopyRight (copyright), LegalTrademarks (marques déposées), OriginalFileName (nom d'origine du fichier), ProductName (nom du produit) ou ProductVersion (version du produit).*/
     
      char szName[512];
      LPBYTE lpBuffer = new char[512];
      int TailleBuffer=512;
      if (n != 0)
      {
        wsprintf(szName, "\\StringFileInfo\\%04x%04x\\FileVersion", translation.langID, translation.charset);
        VerQueryValue((LPVOID)pData, szName, (void **) &lpBuffer,(unsigned int *) &TailleBuffer);
      }
     
      /*L'information de version se trouve maintenant, sous forme d'une chaîne de caractères, dans la zone pointée par lpBuffer. */
      Version->Caption = "Version " + AnsiString((char*) lpBuffer);
    }

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 58
    Par défaut
    Oops désolé, j'ai oublié de le préciser, mais pour que cela marche, il faut aussi définir la structure suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct TRANSLATION
      {
        WORD langID;
        WORD charset;
      } translation;

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 2
    Par défaut
    ouch ah oui ca fait dans le simplissime! :p
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant]infos ds session sans cookie ? url rewriting ?
    Par Satanas_et_diabolo dans le forum ASP
    Réponses: 8
    Dernier message: 10/10/2006, 17h13
  2. [Info] Projet JSP
    Par daninho dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 06/03/2006, 21h01
  3. [Débutant][Info] télécharger un fichier mp3
    Par oumani dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/02/2006, 16h17
  4. [Info]Projet Orienté Objet Java ou C++
    Par faressam dans le forum Langage
    Réponses: 2
    Dernier message: 16/02/2006, 18h40
  5. [Débutant] [Info] Comment est stocké un objet flash ?
    Par orelero dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 20/10/2005, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo