Jump to content

Retrieve language info from file


Recommended Posts

I am trying to retrieve the language info from a dll file similar to the way a files version is retrieved using FileGetVersion. I can see the info I want on the version tab of the file but I am unable to read it via AutoIt.

I have need to read the \VarFileInfo\Translation block of the files resource data to get the decimal for the language I can then use it to change to the language locale but I don't know how to do it. Windows obviously does it so it maybe an API call as it also converts it to the locale.

Does anyone know how to do this?.

Thanks

Link to comment
Share on other sites

Have you tried FileGetVersion("your.dll", "DefaultLangCodepage") ?

Damn that was fast :-). I hadn't tried it but I have now and it works, I have looked at the FilegetVersion help section a few times but always missed the special strings, thanks SKruge
Link to comment
Share on other sites

If your trying to see what languages a resource type in a dll contains (eg: RT_ICON, RT_FONT, $RT_STRING .. etc)

Then you can use EnumResourceLanguages() or EnumResourceLanguagesEx().

#include <WinAPI.au3>

Global Const $RT_CURSOR = 1
Global Const $RT_BITMAP = 2
Global Const $RT_ICON = 3
Global Const $RT_MENU = 4
Global Const $RT_DIALOG = 5
Global Const $RT_STRING = 6
Global Const $RT_FONTDIR = 7
Global Const $RT_FONT = 8
Global Const $RT_ACCELERATOR = 9
Global Const $RT_RCDATA = 10
Global Const $RT_MESSAGETABLE = 11
Global Const $RT_GROUP_CURSOR = 12
Global Const $RT_GROUP_ICON = 14
Global Const $RT_VERSION = 16
Global Const $RT_DLGINCLUDE = 17
Global Const $RT_PLUGPLAY = 19
Global Const $RT_VXD = 20
Global Const $RT_ANICURSOR = 21
Global Const $RT_ANIICON = 22
Global Const $RT_HTML = 23
Global Const $RT_MANIFEST = 24


$hModule = _WinAPI_LoadLibrary("shell32.dll")
_EnumResourceLanguages($hModule, $RT_VERSION, 1)
_WinAPI_FreeLibrary($hModule)

Func _EnumResourceLanguages($hModule, $pType, $pName)
    Local $aRet, $xCB
    If Not IsPtr($hModule) Then Return SetError(1, 0, 0)
    $xCB = DllCallbackRegister('___EnumResLangProc', 'int', 'int_ptr;int_ptr;int_ptr;int_ptr;int_ptr')
    $aRet = DllCall('kernel32.dll', 'int', 'EnumResourceLanguagesW', 'ptr', $hModule, 'int', $pType, 'int', $pName, 'ptr', DllCallbackGetPtr($xCB), 'ptr', 0)
    DllCallbackFree($xCB)
    If $aRet[0] <> 1 Then Return SetError(2, 0, 0)
    Return SetError(0, 0, 1)
EndFunc

Func ___EnumResLangProc($hModule, $pType, $pName, $wIDLanguage, $lParam)
    Local $aSize = DllCall('kernel32.dll', 'int', 'GlobalSize', 'ptr', $wIDLanguage)
    ConsoleWrite($wIDLanguage & @LF)
    Return 1
EndFunc

If you need to find what resource types are in the file then you can use EnumResourceTypes() or EnumResourceTypesEx().

If you need to find out what resource names are in the file then you can use EnumResourceNames() or EnumResourceNamesEx().

More info on Resource functions here MSDN

Cheers

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...