AutoIt
$pGrp = _WinAPI_LockResource($hGrp)
$tGrp = DllStructCreate("ushort idReserved; ushort idType; ushort idCount; byte idEntries;", $pGrp)
$pEntry = DllStructGetPtr($tGrp, "idEntries")
For $j = 1 To DllStructGetData($tGrp, "idCount")
$tEntry = DllStructCreate("align 2; byte bWidth; byte bHeight; byte bColorCount; byte bReserved; ushort wPlanes; ushort wBitCount; uint dwBytesInRes; ushort nId;", $pEntry)
$pEntry += DllStructGetSize($tEntry)
Next
Alles anzeigen
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...