Attribute von Version auslesen



  • Hallo,

    ich möchte durch klick auf einen Button in ein Textfeld die Version meines Programmes schrieben.
    Dafür möchte ich das Attribut der .exe auslesen und in dieses Feld schreiben.
    Ich weiß das es den Befehl "GetFileAtributes" gibt, trotzdem komme ich nicht weiter.

    Danke



  • hier mal ein Beispiel um die Versionsnummer auszulesen:

    DWORD DWD;
    // Read size of info block.
    DWORD VerInfoSize = GetFileVersionInfoSize(Application->ExeName.c_str(),&DWD);
    if (VerInfoSize)
      {
      char *VerInfo = new char[VerInfoSize];
      // Read info block.
      if (!GetFileVersionInfo(Application->ExeName.c_str(),0,VerInfoSize,VerInfo)) RaiseLastWin32Error();
    
      struct LANGANDCODEPAGE {
        WORD wLanguage;
        WORD wCodePage;
      } *lpTranslate;
    
      UINT cbTranslate;
    
      // Read the list of languages and code pages.
      VerQueryValue(VerInfo,
                    TEXT("\\VarFileInfo\\Translation"),
                    (LPVOID*)&lpTranslate,
                    &cbTranslate);
    
      // Read the file description for each language and code page.
      String SubBlock;
      char *LangInfo;
      UINT LangSize;
      for( UINT i=0; i < (cbTranslate/sizeof(struct LANGANDCODEPAGE)); i++ )
        {
        SubBlock.printf("\\StringFileInfo\\%04x%04x\\ProductName",lpTranslate[i].wLanguage,lpTranslate[i].wCodePage);
        VerQueryValue(VerInfo,SubBlock.c_str(),&(void*)LangInfo,&LangSize);
        LName->Caption = LangInfo;
        SubBlock.printf("\\StringFileInfo\\%04x%04x\\FileVersion",lpTranslate[i].wLanguage,lpTranslate[i].wCodePage);
        VerQueryValue(VerInfo,SubBlock.c_str(),&(void*)LangInfo,&LangSize);
        LVersion->Caption = (AnsiString)"Version " + LangInfo;
        Version = LangInfo;
        SubBlock.printf("\\StringFileInfo\\%04x%04x\\Comments",lpTranslate[i].wLanguage,lpTranslate[i].wCodePage);
        VerQueryValue(VerInfo,SubBlock.c_str(),&(void*)LangInfo,&LangSize);
        LComment->Caption = LangInfo;
        }
      delete[] VerInfo;
      }
    

    hierbei werden Version, Produktname und die Kommentare ausgelesen



  • Blick da nicht ganz durch, da ich ein Neuling in c++ bin.
    Gibt es nicht eine einfache und für mich verständlichere Lösung wie ich nur die Version auslese und diese direkt in ein Edit-Feld schreibe?

    Danke



  • Leg mal auf deinem Formular 3 Labels mit Namen LName, LVersion und LComment an, kopier den Quellcode z.B. in einen Buttonclick und starte das Programm, betätige den Button und schau was die Labels anzeigen. Die entsprechenden Zuweisungszeilen in dem von mir geposteten Quellcode sind 31, 35 und 39.


Anmelden zum Antworten