I have some reasonably tried and tested code which uses the Windows API calls to read FileVersionInfo strings, like \"FileVersion\" and \"CompanyName\".
I found it f
Unfortunately the VERSIONINFO
structure, when compiled from a resource file, allows you to define languages that don't exist in the string block, and string blocks that have no entry in the language table. In other words, the structure isn't sanity checked. As Jonathan Potter mentions in comments, your best bet when working with an arbitrary library is to use a heuristic search for the string block that best fits your application.
In your case, however, you're using the VLC libraries which currently define their version information as follows: (trimmed so it doesn't take half a page)
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4"
BEGIN
(...)
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
As you can see the language in the translation block is en-us CP1200 (UTF-16LE), but the string block is tagged en-us CP1252 (ANSI Latin 1). Oddly enough the information for the main executable is correct, and the information is nearly identical.
Remy Lebeau submitted a bug report for the issue, and I've submitted a patch.
As of 24-Jun-2016 the patch has been accepted and backported to the 2.2 maintenance branch.