[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 AnwendungDen 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
-
Vielleicht ist da was dabei: http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/resources/versioninformation.asp
-
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]; };