StringFileInfo von VLC.exe korrekt?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

StringFileInfo von VLC.exe korrekt?

Beitrag von Sicro »

Hallo PB'ler,

ich programmiere derzeit ein Programm, dass von Programmdateien (*.exe) die StringFileInfo-Daten ausliest.
Das Programm funktioniert schon mit fast allen Programmdateien korrekt, nur bei VLC.exe und ein paar anderen leider nicht.

Als ich mir den Unterschied der funktionierenden und nicht funktionierenden Programmdateien angesehen habe, fiel mir auf
das der Eintrag des Blocks "VarFileInfo" gar nicht in dem Block "StringFileInfo" vorhanden ist.

Code: Alles auswählen

1 VERSIONINFO
FILEVERSION 1,1,0,0
PRODUCTVERSION 1,1,0,0
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
	BLOCK "040904E4"
	{
		VALUE "CompanyName", "the VideoLAN Team"
		VALUE "ProductName", "VLC media player"
		VALUE "ProductVersion", "1,1,0,0"
		VALUE "InternalName", ""
		VALUE "OriginalFilename", "vlc.exe"
		VALUE "FileVersion", "1.1.0"
		VALUE "FileDescription", "VLC media player"
		VALUE "LegalCopyright", "(c) 1996-2010 the VideoLAN Team"
	}
}

BLOCK "VarFileInfo"
{
	VALUE "Translation", 0x0409 0x04B0
}
}
Haben da die Programmierer geschlampt?

Mfg Sicro
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Frank Smart
Beiträge: 26
Registriert: 20.07.2005 15:21

Re: StringFileInfo von VLC.exe korrekt?

Beitrag von Frank Smart »

Hallo,

was soll daran jetzt nicht korrekt sein? Siehe auch:

http://msdn.microsoft.com/en-us/library ... S.85).aspx

Liebe Grüße,

Frank
PureBasic Version 3.94
PureBasic Version 4.31
PureBasic Version 4.40

Feel the ..Pure.. Power
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: StringFileInfo von VLC.exe korrekt?

Beitrag von Sicro »

Hallo Frank Smart,

sämtliche Codes, die ich im Internet gefunden habe, lesen erst den Eintrag von VarFileInfo/Translation:

Code: Alles auswählen

NeededBufferSize = GetFileVersionInfoSize_(@FilePath,0)
*Buffer = AllocateMemory(NeededBufferSize)
GetFileVersionInfo_(@FilePath,0,NeededBufferSize,*Buffer)
VerQueryValue_(*Buffer,"\\VarFileInfo\\Translation",@Pointer,@PointerLen)
TranslationCode.s = RSet(Hex(PeekW(Pointer)),4,"0") + RSet(Hex(PeekW(Pointer + 2)),4,"0")
Danach wird der ermittelte Wert für die Ermittlung der eigentlichen Informationen verwendet, z. B.:

Code: Alles auswählen

VerQueryValue_(*Buffer,"\\StringFileInfo\\" + TranslationCode + "\\FileVersion",@Pointer,@PointerLen)
Debug PeekS(Pointer)
Mit dem ersten Code bekomme ich bei VLC.exe den Wert "4094B0", wie er auch in der Datei vorhanden ist.
Beim zweiten Code werden keine Informationen zurückgeliefert, weil es den Block "4094B0" im Block "StringFileInfo" nicht gibt, sondern den Block "040904E4".

Nun frage ich mich, wie korrekt vorgegangen werden muss, um den Wert "040904E4" zu ermitteln.

Ich könnte zwar die Informationen mit ReadFile() selber raussuchen, aber irgentwie muss das ja mit der Win-API gehen.

Klicke ich mit der rechten Maustaste auf die VLC.exe und wähle "Eigenschaften" werden mir die Einträge des StringFileInfo-Blocks ja auch angezeigt.

Mfg Sicro
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Antworten