[C] Infos aus *.exe auslesen (Name + Versionsnummer)



  • Hallo allerseits,

    habe leider auf die schnelle nichts gefunden. Habe hier schon öfter mitgelesen, mich aber nie registriert.^^

    Nun, ich suche etwas, womit ich Infos aus einer *.exe Datei auslesen kann.
    Es geht dabei um folgendes:

    - Den Namen der Anwendung
    - Die Versionsnummer der Anwendung

    Den Pfad der Anwendung und die Größe des Ordners wo diese liegt werde ich wohl anders auslesen, da es einfacher ist als es aus der exe zu holen denke ich mal, wobei die Größe ja nichtmal geht, da werde ich die Größe aller Files im Ordner addieren müssen.

    Hat jemand eine Idee wie ich den Namen und die Versionsnummer aus der exe auslesen und als String speichern kann?

    Das ganze in C und nicht in C++.
    Arbeite nur mit C. Als GUI nutze ich IUP ( http://www.tecgraf.puc-rio.br/iup/ ).

    Lieben Gruß,
    Felix





  • THX! Das müssten wohl die richtigen Funktionen sein. Werde sie mal ausprobieren 🙂





  • Jau funktioniert wunderbar, kann nun die Versionsnummer und den Namen der Anwendung aus der exe auslesen, sofern sie in der exe drin stehen 🙂

    So wirds gemacht:

    int getfinfo(const char *filename, struct info *pInfo)
    {
    	struct LANGANDCODEPAGE
    	{
    		WORD wLanguage;
    		WORD wCodePage;
    	} *pTranslate;
    
    	DWORD handle, size;
    	BOOL success;
    	char *pData;
    	char *pBuffer;
    	UINT len;
    	char str[100];
    
    	size = GetFileVersionInfoSize(filename, &handle);
    	if(size == 0)
    		return 0;
    
    	pData = malloc(size);
    	success = GetFileVersionInfo(filename, handle, size, pData);
    	if(!success)
    	{
    		free(pData);
    		return 0;
    	}
    
    	success = VerQueryValue(pData, "\\VarFileInfo\\Translation", &pTranslate, &len);
    	if(!success)
    	{
    		free(pData);
    		return 0;
    	}
    
    	sprintf(str, "\\StringFileInfo\\%04x%04x\\ProductName", pTranslate->wLanguage, pTranslate->wCodePage);
    
    	success = VerQueryValue(pData, str, &pBuffer, &len);
    	if(success)
    		strncpy(pInfo->name, pBuffer, 25);
    	else
    		pInfo->name[0] = '\0';
    
    	strncpy(pInfo->name, pBuffer, 40);
    
    	sprintf(str, "\\StringFileInfo\\%04x%04x\\ProductVersion", pTranslate->wLanguage, pTranslate->wCodePage);
    
    	success = VerQueryValue(pData, str, &pBuffer, &len);
    	if(success)
    		strncpy(pInfo->version, pBuffer, 20);
    	else
    		pInfo->version[0] = '\0';
    
    	free(pData);
    	return 1;
    }
    

    Das ganze wird dann in einem anderen Modul ausgelesen und in einer Struktur gespeichert, sodass ich es in meinem Prog ausgeben kann.



  • Du solltest vllt. auch noch die Definition der Struktur 'info' posten 😉 .



  • Oh, na klar 🙂

    struct info
    {
    	char name[25];
    	char version[20];
    };
    

Anmelden zum Antworten