#include <WinAPI.au3>
#include <Memory.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <Constants.au3>
Global Const $RT_BITMAP = 2
Global Const $RT_RCDATA = 10

Func DllInclude($CtrlID, $Resname, $Resfile = -1, $ResType = 10)
    ;Diese Funktion basiert auf der UDF von Zedna@Autitscript.com und Code von Progandy@AutoIt.de
    Local Const $IMAGE_BITMAP = 0
    Local Const $STM_SETIMAGE = 0x0172
    Local $hmod, $hwnd, $InfoBlock, $ResSize, $Mem, $pMem, $dll, $dll2, $hData, $pData, $pStream, $ret, $hBitmap, $pBitmap
    If $Resfile = -1 Then
        $hmod = _WinAPI_GetModuleHandle("")
    Else
        $hmod = _WinAPI_LoadLibrary($Resfile)
    EndIf
    If $ResType = $RT_BITMAP Then
        $hBitmap = _WinAPI_LoadImage($hmod, $Resname, $IMAGE_BITMAP, 0, 0, 0)
        If @error Then Return SetError(1, 0, 0)
        $hwnd = GUICtrlGetHandle($CtrlID)
        If $hwnd = 0 Then Return SetError(2, 0, 0)
        DllCall("user32.dll", "hwnd", "SendMessage", "hwnd", $hwnd, "int", $STM_SETIMAGE, "int", $IMAGE_BITMAP, "int", $hBitmap)
        If @error Then Return SetError(3, 0, 0)
    Else
        $InfoBlock = DllCall("kernel32.dll", "int", "FindResourceA", "int", $hmod, "str", $Resname, "long", $ResType)
        If @error Then Return SetError(4, 0, 0)
        $InfoBlock = $InfoBlock[0]
        If $InfoBlock = 0 Then Return SetError(5, 0, 0)
        $ResSize = DllCall("kernel32.dll", "dword", "SizeofResource", "int", $hmod, "int", $InfoBlock)
        If @error Then Return SetError(6, 0, 0)
        $ResSize = $ResSize[0]
        If $ResSize = 0 Then Return SetError(7, 0, 0)
        $Mem = DllCall("kernel32.dll", "int", "LoadResource", "int", $hmod, "int", $InfoBlock)
        If @error Then Return SetError(8, 0, 0)
        $Mem = $Mem[0]
        If $Mem = 0 Then Return SetError(9, 0, 0)
        $pMem = DllCall("kernel32.dll", "int", "LockResource", "int", $Mem)
        If @error Then Return SetError(8, 0, 0)
        $pMem = $pMem[0]
        If $pMem = 0 Then Return SetError(10, 0, 0)
        If $Resfile <> -1 Then DllCall("Kernel32.dll", "int", "FreeLibrary", "str", $hmod)
        $hData = _MemGlobalAlloc($ResSize, 2)
        $pData = _MemGlobalLock($hData)
        _MemMoveMemory($pMem, $pData, $ResSize)
        _MemGlobalUnlock($hData)
        $ret = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "int", $hData, "long", 1, "Int*", 0)
        $pStream = $ret[3]
        _GDIPlus_Startup()
        $pBitmap = DllCall($ghGDIPDll, "int", "GdipCreateBitmapFromStream", "ptr", $pStream, "int*", 0)
        $pBitmap = $pBitmap[2]
        $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pBitmap)
        $hwnd = GUICtrlGetHandle($CtrlID)
        If $hwnd = 0 Then Return SetError(11, 0, 0)
        DllCall("user32.dll", "hwnd", "SendMessage", "hwnd", $hwnd, "int", $STM_SETIMAGE, "int", $IMAGE_BITMAP, "int", $hBitmap)
        If @error Then Return SetError(12, 0, 0)
        _GDIPlus_BitmapDispose($pBitmap)
        _GDIPlus_Shutdown()
        $dll = DllStructCreate("Uint", $pStream)
        $dll2 = DllStructCreate("uInt", DllStructGetData($dll, 1) + 8)
        DllCall("", "UInt", DllStructGetData($dll2, 1), "UInt", $pStream)
        _WinAPI_DeleteObject($pStream)
        $pStream = 0
        _MemGlobalFree($hData)
    EndIf
EndFunc   ;==>_SetImagefromResource