Icons extrahieren

  • Hi,
    ich habe mal wieder eine alte UDF ausgegraben.

    Damit können Icons extrahiert werden. Leider werden Icons mit 256x256 als 0x0 angezeigt.
    Kann mir einer einen Tipp geben wo der Fehler liegen könnte :/

    Getestet habe ich es mit dem ersten Icon der Datei "wucltux.dll" von Win 7.

  • Sorry stehe grad aufm Schlauch, wo steht im 9. Block in der Konsole 100?
    Es wird Zeichen 1 und 2 x 3 und 4 verwendet

    Code
    000000000100200016D000000900
    0x0
  • 256 = 0x100

    Wenn das Skript jeweils 2 Bytes für die Dimension speichert, dann kann das nur bis zu einer Größe von 0xFF x 0XFF (255 x 255) funktionieren. 256 hat 3 Bytes.

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • OK, dann bin auch beruhigt. Also habe ich keinen Denkfehler.
    Wenn jemand trotzdem eine Idee hat wie man auch 256x256 in der dll ermitteln kann, bitte posten.

  • In den Bytes bWidth und bHeight gehen sich nur Werte aus zwischen 0..255 / 0x0..0xFF

    256 entsricht wieder 0 / 0x100!


    Ungetestet:
    Ein Icon mit 256x256 gibt es nur in 32Bit!?
    Also würde ich wBitCount auf den Wert 32 testen.

    Weiters glaube ich zu wissen, dass bei Icons 256x256px/32Bit die Bilddaten als PNG abgespeichert sind.
    Demnach müssten die Resourcedaten _WinAPI_FindResource($hInstance, $RT_ICON, DllStructGetData($tEntry, "nId"))
    mit einem PNG-Header beginnen.

    Wenn beides zutrifft, dann entspricht bWidth = 0 => 256


    Das mit dem PNG-Header kannst du dir wahrscheinlich sparen:

    AutoIt
    $hRes = _WinAPI_FindResource($hInstance, $RT_ICON, DllStructGetData($tEntry, "nId"))
    $hIcn = _WinAPI_LoadResource($hInstance, $hRes)
    $iIcn = _WinAPI_SizeOfResource($hInstance, $hRes)
    $pIcn = _WinAPI_LockResource($hIcn)
    $hIcon = _WinAPI_CreateIconFromResourceEx($pIcn, $iIcn)

    Danahc einfach mit _WinAPI_GetIconDimension die Größe auslesen...

  • @eukalyptus
    Puh, hört sich nicht schlecht an. Allerdings kriege ich kein funktionierendes Beispiel zusammengestellt.

    @UEZ
    Danke für die Info.

  • Habe es noch nicht vollständig getestest:

    Edit: ist nicht dass, was du willst. Eukalyptus' Version sollte es machen! :thumbup::klatschen:

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    3 Mal editiert, zuletzt von UEZ (22. März 2016 um 21:28)