Icons aus Dll

  • 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
    [autoit]

    #include <gdiplus.au3>
    #include <array.au3>
    #include <WinAPI.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $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)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    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

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

    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

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

    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

    [/autoit]

    Danke schonmal für Hilfe...

    MFG Chris :D

  • Also, du kannst das Bild in Icons um wandeln, (icons erzeugen geht mit Iview) dann mit ResHacker in eine dll speichern. Dann mit dem GuiSetIcon (wenn ich mich nicht irre) in einer Schleife in das Gui bringen.
    Es geht auch einfacher: Mit der Prospeed.dll kannst du viele kleine Bilder zu einem zusammenfügen, oder ganze Bilder aus einer dll laden. Wie das geht, daran arbeite ich gerade. Hier mal die Prospeed-Funktionen (sie sind eigentlich für Profan gedacht, aber mit Autoit kann man sie auch benutzen.)

  • @Faweyer
    er hat ja schon die dll aber er will in einer gui über gdi alle anzeigen lassen und zu einem bild "zusamenschweisen"

    sieht doch schon gut aus funktioniert doch eh ganz gut
    wie viele icons sind es denn?