Servus...
Ich stehe mal wieder aufm Schlauch ^^...
unzwar möchte ich alle Icons aus einer Dll zu einem großem Bild zusammenfügen wie das Bild untem im Anhang... habe schon etwas mit der GDI rumprobiert. Leider habe ich davon noch keine ahnung wie ich ein Icon aus einer dll rauslesen kann und dann nach und nach zu einem großen Bild zusammenfügen kann.
Spoiler anzeigen
#include <gdiplus.au3>
#include <array.au3>
#include <WinAPI.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$hgui = GUICreate ( "test" )
GUISetBkColor ( 0xffffff )
$hpic = GUICtrlCreatePic ( "",5,5,16,16 )
$hBitmap = __RibbonsBar_SetIconAlpha($hpic,'smallIcons.dll', 1, 16, 16)
_GDIPlus_ImageSaveToFile ( $hBitmap,'test.bmp' )
If @error Then MsgBox ( 0,"",@error )
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func __RibbonsBar_SetIconAlpha($hWnd, $sIcon, $iIndex, $iWidth, $iHeight)
If Not IsHWnd($hWnd) Then
$hWnd = GUICtrlGetHandle($hWnd)
If $hWnd = 0 Then
Return SetError(1, 0, 0)
EndIf
EndIf
Local $hIcon = __RibbonsBar_ShellExtractIcons($sIcon, $iIndex, $iWidth, $iHeight)
If $hIcon = 0 Then
Return SetError(1, 0, 0)
EndIf
Local $hBitmap, $hObj, $hDC, $hMem, $hSv
$hDC = _WinAPI_GetDC($hWnd)
$hMem = _WinAPI_CreateCompatibleDC($hDC)
$hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iWidth, $iHeight)
$hSv = _WinAPI_SelectObject($hMem, $hBitmap)
_WinAPI_DrawIconEx($hMem, 0, 0, $hIcon, $iWidth, $iHeight, 0, 0, 2)
_WinAPI_ReleaseDC($hWnd, $hDC)
_WinAPI_SelectObject($hMem, $hSv)
_WinAPI_DeleteDC($hMem)
_WinAPI_DestroyIcon($hIcon)
_WinAPI_DeleteObject(__RibbonsBar_SendMessage($hWnd, 0x0172, 0, 0))
__RibbonsBar_SendMessage($hWnd, 0x0172, 0, $hBitmap)
$hObj = __RibbonsBar_SendMessage($hWnd, 0x0173)
If $hObj <> $hBitmap Then
_WinAPI_DeleteObject($hBitmap)
EndIf
Return $hBitmap
EndFunc ;==>__RibbonsBar_SetIconAlpha
Func __RibbonsBar_ShellExtractIcons($sIcon, $iIndex, $iWidth, $iHeight)
Local $Ret = DllCall('shell32.dll', 'int', 'SHExtractIconsW', 'wstr', $sIcon, 'int', $iIndex, 'int', $iWidth, 'int', $iHeight, 'ptr*', 0, 'ptr*', 0, 'int', 1, 'int', 0)
If (@error) Or ($Ret[0] = 0) Or ($Ret[5] = Ptr(0)) Then
Return SetError(1, 0, 0)
EndIf
Return $Ret[5]
EndFunc ;==>_WinAPI_ShellExtractIcons
Func __RibbonsBar_SendMessage($hWnd, $iMsg, $wParam = 0, $lParam = 0, $iReturn = 0, $wParamType = "wparam", $lParamType = "lparam", $sReturnType = "lparam")
Local $aResult = DllCall("user32.dll", $sReturnType, "SendMessage", "hwnd", $hWnd, "int", $iMsg, $wParamType, $wParam, $lParamType, $lParam)
If @error Then Return SetError(@error, @extended, "")
If $iReturn >= 0 And $iReturn <= 4 Then Return $aResult[$iReturn]
Return $aResult
EndFunc ;==>__RibbonsBar_SendMessage
Danke schonmal für Hilfe...
MFG Chris