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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
   |    String PathNomExt = Application->ExeName;
   DWORD Size = GetFileVersionInfoSize(PathNomExt.c_str(), &Size);
   if (Size <= 0) {
      Memo_resultat_test->Lines->Add( "Pas d'information de version dans cette application." );
      return;
   }
 
   BYTE *Buffer;
   try{
      Buffer = new unsigned char[Size];
      LPVOID   Str;
      UINT     Len;
      String   TypeInfo;
      LPDWORD lpdwLangCp;
      char szFileInfo[26];
 
      GetFileVersionInfo(PathNomExt.c_str(), 0, Size, Buffer);
 
      // Lecture de la table des langues et jeux de caractères
      if (!VerQueryValue(Buffer, "\\VarFileInfo\\Translation",  (LPVOID *)&lpdwLangCp, &Len)) return; // erreur
      wsprintf(szFileInfo, "\\StringFileInfo\\%04x%04x\\", LOWORD(*lpdwLangCp), HIWORD(*lpdwLangCp));
 
      // Nom de l'organisation
      TypeInfo = szFileInfo + (AnsiString) "CompanyName";
      if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
            Memo_resultat_test->Lines->Add( "Nom de l'organisation :\t" + (AnsiString) reinterpret_cast<char *>(Str) );
      else  Memo_resultat_test->Lines->Add( "Nom de l'organisation :\tErreur de lecture" );
 
      // Description
      TypeInfo = szFileInfo + (AnsiString) "FileDescription";
      if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
            Memo_resultat_test->Lines->Add( "Description :\t" + (AnsiString) reinterpret_cast<char *>(Str) );
      else  Memo_resultat_test->Lines->Add( "Description :\tErreur de lecture" );
 
      // Version de fichier
      TypeInfo = szFileInfo + (AnsiString) "FileVersion";
      if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
            Memo_resultat_test->Lines->Add( "Version de fichier :\t" + (AnsiString) reinterpret_cast<char *>(Str) );
      else  Memo_resultat_test->Lines->Add( "Version de fichier :\tErreur de lecture" );
 
      // Nom interne
      TypeInfo = szFileInfo + (AnsiString) "InternalName";
      if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
            Memo_resultat_test->Lines->Add( "Nom interne :\t" + (AnsiString) reinterpret_cast<char *>(Str) );
      else  Memo_resultat_test->Lines->Add( "Nom interne :\tErreur de lecture" );
 
      // Copyright
      TypeInfo = szFileInfo + (AnsiString) "LegalCopyRight";
      if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
            Memo_resultat_test->Lines->Add( "Copyright :\t" + (AnsiString) reinterpret_cast<char *>(Str) );
      else  Memo_resultat_test->Lines->Add( "Copyright :\tErreur de lecture" );
 
      // Marques légales
      TypeInfo = szFileInfo + (AnsiString) "LegalTrademarks";
      if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
            Memo_resultat_test->Lines->Add( "Marques légales :\t" + (AnsiString) reinterpret_cast<char *>(Str) );
      else  Memo_resultat_test->Lines->Add( "Marques légales :\tErreur de lecture" );
 
      // Nom d'origine du fichier
      TypeInfo = szFileInfo + (AnsiString) "OriginalFileName";
      if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
            Memo_resultat_test->Lines->Add( "Nom d'origine du fichier :\t" + (AnsiString) reinterpret_cast<char *>(Str) );
      else  Memo_resultat_test->Lines->Add( "Nom d'origine du fichier :\tErreur de lecture" );
 
      // Nom du produit
      TypeInfo = szFileInfo + (AnsiString) "ProductName";
      if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
            Memo_resultat_test->Lines->Add( "Nom du produit :\t" + (AnsiString) reinterpret_cast<char *>(Str) );
      else  Memo_resultat_test->Lines->Add( "Nom du produit :\tErreur de lecture" );
 
      // Version du produit
      TypeInfo = szFileInfo + (AnsiString) "ProductVersion";
      if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
            Memo_resultat_test->Lines->Add( "Version du produit :\t" + (AnsiString) reinterpret_cast<char *>(Str) );
      else  Memo_resultat_test->Lines->Add( "Version du produit :\tErreur de lecture" );
 
      // Commentaire
      TypeInfo = szFileInfo + (AnsiString) "Comments";
      if (VerQueryValue(Buffer, TypeInfo.c_str(), &Str, &Len))
            Memo_resultat_test->Lines->Add( "Commentaire :\t" + (AnsiString) reinterpret_cast<char *>(Str) );
      else  Memo_resultat_test->Lines->Add( "Commentaire :\tErreur de lecture" );
 
   }
   __finally{
      delete Buffer;
      Memo_resultat_test->Lines->Add( "\t----------------------------" );
   }
} | 
Partager