| 12
 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