ResourceEnum

  • Hey,
    ich suche eine Function, die folgendes macht:
    Beispiel:
    _ReadIconGroupNames ($filename)

    Als Return gibt es ein Array aus, das gefüllt ist mit ALLEN IconGroup ($RT_ICON_GROUP) Namen (nicht index) ausgibt.
    Ich hab mir schon einige Funktionen angeschaut, allerdings bin ich nie weitergekommen.
    Für eine Hilfe wäre ich dankbar.
    PS.: Das hier habe ich noch gefunden:
    http://www.autohotkey.com/forum/topic30298-15.html&sid=ea568650da2a53135e48549826560df7

    Gruß Snify

    EDIT: Ich habs ^^

    Einmal editiert, zuletzt von snify (1. Dezember 2009 um 22:32)

  • Dann wärs ja schön wen du andere auch daran teilhaben lassen würdest dass DU es hast....

  • [autoit]

    #include <WinAPI.au3>

    [/autoit][autoit][/autoit][autoit]

    ConsoleWrite('Enumerating - user32.dll, type=3 (RT_ICON):' & @CRLF)
    _ResourceEnumNames(_WinAPI_GetModuleHandle('user32.dll'), 3)
    ConsoleWrite('Enumerating - ntbackup.exe, type=10 (RT_RCDATA):' & @CRLF)
    _ResourceEnumNames('ntbackup.exe', 10)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _ResourceEnumNames($vModule, $iType)
    Local $hModule = $vModule, $aRet, $fLoad = IsString($vModule), $xCB = DllCallbackRegister('___EnumResNameProc','int','int_ptr;int_ptr;int_ptr;int_ptr')
    If $fLoad Then $hModule = _WinAPI_LoadLibrary($vModule)
    $aRet = DllCall('kernel32.dll','int','EnumResourceNamesW', 'ptr',$hModule, 'int',$iType, 'ptr',DllCallbackGetPtr($xCB), 'ptr',0)
    DllCallbackFree($xCB)
    If $fLoad Then _WinAPI_FreeLibrary($hModule)
    EndFunc
    Func ___EnumResNameProc($vModule, $pType, $pName, $lParam)
    Local $aSize = DllCall('kernel32.dll','int','GlobalSize','ptr',$pName), $tBuf
    If $aSize[0] Then
    $tBuf = DllStructCreate('wchar[' & $aSize[0] & ']', $pName)
    ConsoleWrite(DllStructGetData($tBuf, 1) & @CRLF) ;string ID
    Else
    ConsoleWrite($pName & @CRLF) ;integer ID
    EndIf
    Return 1 ;continue enumeration
    EndFunc

    [/autoit]

    EDIT: (Speziell für Icons)

    Spoiler anzeigen
    [autoit]

    ConsoleWrite('Enumerating - shell32.dll, type=14 (RT_GROUP_ICON):' & @CRLF)
    _ResourceEnumNames(_WinAPI_GetModuleHandle('shell32.dll'), 14)

    [/autoit] [autoit][/autoit] [autoit]

    Func _ResourceEnumNames($vModule, $iType)
    Local $hModule = $vModule, $aRet, $fLoad = IsString($vModule), $xCB = DllCallbackRegister('___EnumResNameProc','int','int_ptr;int_ptr;int_ptr;int_ptr')
    If $fLoad Then $hModule = _WinAPI_LoadLibrary($vModule)
    $aRet = DllCall('kernel32.dll','int','EnumResourceNamesW', 'ptr',$hModule, 'int',$iType, 'ptr',DllCallbackGetPtr($xCB), 'ptr',0)
    DllCallbackFree($xCB)
    If $fLoad Then _WinAPI_FreeLibrary($hModule)
    EndFunc
    Func ___EnumResNameProc($vModule, $pType, $pName, $lParam)
    Local $aSize = DllCall('kernel32.dll','int','GlobalSize','ptr',$pName), $tBuf
    If $aSize[0] Then
    $tBuf = DllStructCreate('wchar[' & $aSize[0] & ']', $pName)
    ConsoleWrite(DllStructGetData($tBuf, 1) & @CRLF) ;string ID
    Else
    ConsoleWrite($pName & @CRLF) ;integer ID
    EndIf
    Return 1 ;continue enumeration
    EndFunc

    [/autoit]