SHGetImageList extrahieren von extra large icons

  • Hi leute ich bin grad dabei ein kleines Stackprogramm zu Scripten und habe das Problem icons die größer als 32x32px sind "Largeicons"
    zu extrahieren (handle icons). Shgetfileinfo "siehe MSDN" gibt mir leider auch nicht das Resourcenfile und index aus in dem die bzw das Icon lagert. Nach langem suchen
    bin ich dan auf diese Seite gestoßen klick . Mein Problem ist das es anscheinend in delphi geschrieben ist , und damit komme ich nicht klar es in Autoit umzusetzen. Falls mir jemand diese functionen übersetzen könnte wäre ich echt geplättet 8o . Manche werden jetzt denken man könnte ja auf die iconResource per registry zugreifen , das geht aber nur bis zu einem gewissen Punkt. Wenn eine Dateierweiterung sein icon über eine Shellex erweiterung
    (iconhandler) bekommt und keine Verknüpfung zu dieser hat bekommt man keinnen index und keine Resource. Als gutes Beispiel kann ich hier Alcohol 120% nennen dessen Erweiterung zb MDF u. MDS bekommen ihre icons von einem iconHandler. Also um es nochmal zusammenzufassen bis 32x32 funktioniert Shgetfileinfo zum extrahieren perfect auch mit files die ihr icon von einem ichonhandler bekommen, aber extragroße icons zb 48x48 o. 128x128
    lassen sich nicht extrahieren.

    EDIT:
    hier mal die Function die ich zurzeit benutze um icons zu extrahieren (max. 32x32px)
    Winapiex.au3 wird vorrausgesetzt.

    [autoit]

    Func Shellicon_set($path,$controlID,$ricon=False)
    Local $hWnd,$tInfo,$hIcon
    $hWnd = GUICtrlGetHandle($controlID)
    $tInfo = DllStructCreate($tagSHFILEINFO)
    _WinAPI_ShellGetFileInfo($path, BitOR($SHGFI_ICON, $SHGFI_SHELLICONSIZE), 0, $tInfo)
    $hIcon = DllStructGetData($tInfo, 'hIcon')
    If Not $ricon Then
    _WinAPI_DestroyIcon(_SendMessage($hWnd,0x0172,$IMAGE_ICON, $hIcon))
    Else
    Return $hIcon
    EndIf
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von Rodny_le_lude (6. Mai 2012 um 17:42)