Grafik(en) in *.exe einbinden ohne Fileinstall

  • Hallo an Alle,

    ich verwende derzeit den Befehl Fileinstall zum einbinden meiner Grafiken in ein exe Datei und lege sie unter C:\Temp ab. Allerdings möchte ich das Tool weitergeben und nicht auf jedem Rechner meine Bilder hinterlassen. Sicherlich gibt es hierfür eine sinnvolle Lösung?
    Ich war auf dieser Seite allerdings weiß ich nicht wie ich diese UDF anwenden soll, kann mir bitte jemand helfen?
    bisher: FileInstall("D:\Logo.jpg", "C:\Temp\Logo.jpg")

    http://www.autoitscript.com/forum/topic/51103-resources-udf/

    Vielen Dank und viele Grüße,
    TOYY1

  • Bei solchen Programmen mache ich meistens einen FileInstall mit einem temporären Namen MIT _TempFile() und lösche die Dateien nach dem Ausführen des Programmes wieder. Du kannst auch alle Resourcen in eine gemeinsame DLL-Datei packen und diese dann auch wieder nach Beenden des Programmes löschen.
    Wenn die Bilder klein genug sind, dann kannst du auch das verwenden, allerdings würde ich es maximal für Bilder bis zu 100x100 verwenden, da es sonst zu langsam wird.

    Oder du nimmst das und lädst die Bilder vom Internet.

  • Es gibt auchnoch die Möglichkeit die Bilder mit FileRead erstmal auszulesen und dann als Variable in den Quellcode mit einzubinden, du müsstest etwas passendes über die Sufu finden, ich erinnere mich das BF z.B. soetwas mal erklärt hat und ein kleines Programm geschrieben hat um die Datei / das Bild sauber in eine Variable zu packen.

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • Die Idee mit dem Löschen ist eigentlich keine schlechte Idee, allerdings auch nicht das gelbe vom Ei. Danke auch für deine anderen Tipps. Allerdings sind die Bilder größer und die Bilder aus dem Netz laden möchte ich nicht. Es kann ja auch mal sein, dass der PC kein Netz hat. Ist das Problem nicht weiter bekannt bzw. weißt du/jemand wie ich diese UDF anwenden muss...So ein kleines Beispiel würde mir sicherlich helfen.

    Vielen Dank und viele Grüße,
    TOYY1

  • Hier ein Beispiel aus dem englische Forum mit einem Bild im Skript:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <Memory.au3>
    #include <WinAPI.au3>

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

    #Region - GUI Create
    GUICreate('Image from Stream smile.gif', 200, 80, -1, -1)
    ;#~ Start image Creation
    $picbox = GUICtrlCreatePic("", 10, 10, 465, 100) ; <<<<< Set Size and it will resize to the correct dimensions.
    GUICtrlSetCursor(-1, 0)
    $LOGO = _LOGOBin() ; <<<<< This will grab the Binary Code from the Function _LOGOBin()
    ;~ $LOGO = _INetBinaryImage() ; <<<<< This will grab the Binary Code from the Function _INetBinaryImage() by using InetRead() to Return in Binary.
    _SetImageBinaryToCtrl($picbox, $LOGO)
    ;#~ end image Creation
    GUICtrlCreateLabel("www.progandy.de.tt", 80, 20)
    $zedna = GUICtrlCreateLabel("Zedna on autoitscript.com", 80, 40)
    GUICtrlSetCursor(-1, 0)

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

    GUISetState()
    #EndRegion - GUI Create

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

    #Region - GUI SelectLoop
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $picbox
    ShellExecute("www.progandy.de.tt")
    Case $msg = $zedna
    ShellExecute("http://www.autoitscript.com/forum/index.php?showuser=6483")
    EndSelect
    WEnd
    #EndRegion - GUI SelectLoop

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

    Func _INetBinaryImage($sImage = "http://www.autoitscript.com/forum/public/style_images/autoit/logo.png")
    $sImage = InetRead($sImage)
    If @error Then Return SetError(1, 1, -1)
    Return $sImage
    EndFunc ;==>_INetBinaryImage

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

    Func _LOGOBin()
    Local $FileName = "0xFFD8FFE000104A46494600010101006000600000FFE1001645786966000049492A0008000000000000000000FFDB004300080606070605080707070909080A"
    $FileName &= "0C140D0C0B0B0C1912130F141D1A1F1E1D1A1C1C20242E2720222C231C1C2837292C30313434341F27393D38323C2E333432FFDB0043010909090C0B0C180D0D"
    $FileName &= "1832211C213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232FFC0001108003F0040"
    $FileName &= "03012200021101031101FFC4001F0000010501010101010100000000000000000102030405060708090A0BFFC400B5100002010303020403050504040000017D"
    $FileName &= "01020300041105122131410613516107227114328191A1082342B1C11552D1F02433627282090A161718191A25262728292A3435363738393A43444546474849"
    $FileName &= "4A535455565758595A636465666768696A737475767778797A838485868788898A92939495969798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5"
    $FileName &= "C6C7C8C9CAD2D3D4D5D6D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F0100030101010101010101010000000000000102030405060708"
    $FileName &= "090A0BFFC400B51100020102040403040705040400010277000102031104052131061241510761711322328108144291A1B1C109233352F0156272D10A162434"
    $FileName &= "E125F11718191A262728292A35363738393A434445464748494A535455565758595A636465666768696A737475767778797A82838485868788898A9293949596"
    $FileName &= "9798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C0301"
    $FileName &= "0002110311003F00F78DDC64D729ABF8BFEC17DF678EDE699B04E2242C703D80F7AE9657DB1393D00AE37C29FE97E30D62F32D886148978E097624FE5B17F3AF"
    $FileName &= "0B30E7AF8B8616326935776FC0EFC2538724EACD5D4509FF0009CCFF00F40CBFFF00C077FF000A07C418609116EE196DF79C2F9CA5371F6CF5AED26B88EDE332"
    $FileName &= "CD2A471AFDE791B007E2698925BDEDBEE4314F04808C821D5877E7A1A1E4CD7C35A57F52BEB343AD1D3D59574CD6ADB5240617539E7835A7BABCF759D363F0CE"
    $FileName &= "B3697DA78F2ED2EA429242B9DA8FD723B007D3B62B7B53F14DB68ED6AB7322A89D495C9C1E3AFF003ACE19855C1D4950C4FBD6D9ADC2AE0D4F96543552FBCE93"
    $FileName &= "26973EF58963E23B1BE00472A96EBD6B5C3E4023A1AF530B8FA189FE1BD7B1C5528CE93E59AB14AFE51158CAE4FF0009EB5CE780A33FD9B7D78C4E6E6E98807D"
    $FileName &= "1405AD0F13DC791A248DBB048A3C2D07D93C316119565668C48CA7A82DC915C186FDEE67567FCA923B57B9817FDE7F912F8934B9F5AD20D9413C7096914B1917"
    $FileName &= "20A8392314BE1ED1D740D256C84C653E63485F18E49CE00EC2A8EBBE25974AD4A0B1B6B2FB54D2446565DFB768CE07F5FCAB34F897C4374A63B7D262818E30F2"
    $FileName &= "316C7AF15D75B1B84A355BA92B4874B0D89A941434507AEE897C6D73E7DC69BA544D995A6F39D476400807F13FC8D5CD575CB7D2960B3BBD365BC89E2FDE9455"
    $FileName &= "70BDB1B5BAE6A9E99A47F6619F59D6EE8BCA17749349D71E83F4C0141D2F45F165F3EA16D7F72D1A9D93440B2678F978600AF1F9D7954A55B158A788A4924B45"
    $FileName &= "7EBDCE9B518C6309DDC637BB5DD95DB45D175DB77BDF0D4B1D9DF47FF2C946C5CE3EEB20E83B640FCEB47C2FAD4B705EC6F55E2BA84EC747EA0FF9FC2B92568B"
    $FileName &= "C3DE35DD64EE208A68EDA42E4B16DD8C8CFD4823E95D0EB2A2CFC71652C7F29B984EF007F75B00FE4696323FBB78986938357B7537AB4AE952936E32578DF75E"
    $FileName &= "44BE3AF35F4A448E36656E084EB8EF491F8D34C8618E34B5D480450A33067B7FBD5D21F2DD364881D7B66A3FB2D9FF00CFBA9F6AD961F1F86AB51D049A93BEE7"
    $FileName &= "9D0C4D074634EAC5E9E76392B0B93AEF8C9EF9229D2DD2258E31326D23B9F5EE6ACEADE21BEB2F16C3A6431C696ECF17CE63C9756C86FD476AD2D76EA6D22C05"
    $FileName &= "C69B6F197C82491FC3DC63D6B175FD3FFE128D32CF58D20FFA4AAE55720332F5DB9E9B95B18CFA9F5AE5C35275E756A54B3A975A5B6B1DB4E54EA4A329AB536B"
    $FileName &= "955DECFCCB1E3B9716BA7248C040D724C99E9F2A9229FE0780269771A9C9841772EF5623198C7DD3F4EB8F635969E398E583ECFA9E9624B98DB0E8CC000C3D55"
    $FileName &= "F907F95476FE3AB9B69E492F2DE17B565022821700C78FE79FD31C57A4AAE1A388559CBA5AD6D8D3EAB89FAAFB050D9EF75AFA143C3D04BE22D623B8F2CBC1F6"
    $FileName &= "937770EC721792513DCF41EC0574334DFDB3E39022F9A1B15F2B781D589CB0FC38AA5A8EBDAA7F621974ED29F4BD39884F3D940701BBAA81C0E8371F5AE83C2F"
    $FileName &= "A759E9FA6AC96E779719DDEA7D4D7062D592C253D5D4776F61D7AAE29D79AB69CA92D6DDEE69EEA37549F64B8FF9E47FEFA1FE349F64B8FF009E47FEFA1FE35F"
    $FileName &= "507CE0D611CD118661943EA3A572B2691AAF87EE64B8D25849048774903728DEFEC7DC7E39E2BADFB25C8FF9647FEFA1FE34E586ED78F2C91E8483FD6BC9C5E5"
    $FileName &= "CE753DBD0972CFF067561F172A49C5ABA7D0E324F10D9DC129AC6812E4F0488D6507078F7E94D8B5BD16CCE74DD0253213CE2D82631D0E4D766D661C1F32C816"
    $FileName &= "F5C8FF001A45B054E63B200FD56B99ACCF6718B7DCEB58BC35BE17E977638E921D7BC4E0C37282CEC5FAC49C961FED377EDD2BAAB5B48EC2C92D636CEDEBED56"
    $FileName &= "DA2BB23023DA3D148FF1A8FECB71FF003C8FFDF43FC6B7C365F515555F152BC96DD91CF88C5BA9154E2B963D91FFD9"
    Return $FileName
    EndFunc ;==>_LOGOBin

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

    ;Authors: Prog@ndy, based on code by Zedna
    Func _SetImageBinaryToCtrl($CtrlId, ByRef $Binary)
    Local $picdata = Binary($Binary) ; Fetch the Data
    Local $piclength = BinaryLen($picdata) ; Get Length

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

    Local $picstruct = DllStructCreate("byte[" & $piclength & "]")
    DllStructSetData($picstruct, 1, $picdata)
    Local $picmemory = DllStructGetPtr($picstruct)
    _SetMemoryImageToCtrl($CtrlId, $picmemory, $piclength)
    DllStructSetData($picstruct, 1, 0)
    $picstruct = ""
    EndFunc ;==>_SetImageBinaryToCtrl

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

    ; Authors: Zedna, based on code by Prog@ndy
    Func _SetMemoryImageToCtrl($CtrlId, $Pointer, $nSize)
    Local $hData, $pData, $pStream, $pBitmap, $hBitmap
    ; use GDI+ for converting to bitmap first
    $hData = _MemGlobalAlloc($nSize, 2)
    $pData = _MemGlobalLock($hData)
    _MemMoveMemory($Pointer, $pData, $nSize)
    _MemGlobalUnlock($hData)
    $pStream = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "int", $hData, "long", 1, "Int*", 0)
    $pStream = $pStream[3]
    _GDIPlus_Startup()
    $pBitmap = DllCall($ghGDIPDll, "int", "GdipCreateBitmapFromStream", "ptr", $pStream, "int*", 0)
    $pBitmap = $pBitmap[2]
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pBitmap)
    _SetBitmapToCtrl($CtrlId, $hBitmap)
    If @error Then SetError(3, 0, 0)
    _GDIPlus_BitmapDispose($pBitmap)
    _GDIPlus_Shutdown()
    _WinAPI_DeleteObject($pStream)
    _MemGlobalFree($hData)
    EndFunc ;==>_SetMemoryImageToCtrl

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

    ; internal helper function
    ; Out of resources.au3 :)
    Func _SetBitmapToCtrl($CtrlId, $hBitmap)
    Local Const $STM_SETIMAGE = 0x0172
    Local Const $IMAGE_BITMAP = 0
    Local Const $SS_BITMAP = 0xE
    Local Const $GWL_STYLE = -16

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

    Local $hWnd = GUICtrlGetHandle($CtrlId)
    If $hWnd = 0 Then Return SetError(1, 0, 0)
    ; set SS_BITMAP style to control
    Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE)
    If @error Then Return SetError(2, 0, 0)
    DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP))
    If @error Then Return SetError(3, 0, 0)
    Local $oldBmp = DllCall("user32.dll", "hwnd", "SendMessage", "hwnd", $hWnd, "int", $STM_SETIMAGE, "int", $IMAGE_BITMAP, "int", $hBitmap)
    If @error Then Return SetError(4, 0, 0)
    If $oldBmp[0] <> 0 Then _WinAPI_DeleteObject($oldBmp[0])
    Return 1
    EndFunc ;==>_SetBitmapToCtrl

    [/autoit]
  • Ich würde gern die UDF's von meinem oben angegeben Link verwenden:
    Das findet man in der resources.au3. Mal schauen welche UDF das macht was ich möchte.

    Spoiler anzeigen

    ; get string from resource
    $string = _ResourceGetAsString("TEST_TXT_1")
    GUICtrlSetData($label1, $string)

    ; set BMP image to picture control from resource bitmap
    _ResourceSetImageToCtrl($pic1, "TEST_BMP_1", $RT_BITMAP)

    ; get bitmap from resource (as pointer)
    $hBmp = _ResourceGet("TEST_BMP_2", $RT_BITMAP)
    ; and use it for whatever you like
    _SetBitmapToCtrl($pic2, $hBmp)

    ; set JPG image to picture control from resource
    _ResourceSetImageToCtrl($pic3, "TEST_JPG_3")

    ; set image to picture control from external DLL resource
    _ResourceSetImageToCtrl($pic4, "#14355", $RT_BITMAP, @SystemDir & "\shell32.dll")

    ; get/use picture from resources as hImage type
    $size1 = _ResourceGetImageSize("TEST_BMP_1", $RT_BITMAP)
    $size2 = _ResourceGetImageSize("TEST_JPG_3")
    GUICtrlSetData($label2, $size1 & @CRLF & $size2)

    ; save binary data or another type (image) from resource to file and get its size in bytes
    $size1 = _ResourceSaveToFile(@ScriptDir & "\binary_data1.dat", "TEST_BIN_1")
    $size2 = _ResourceSaveToFile(@ScriptDir & "\binary_data2.bmp", "TEST_BMP_1", $RT_BITMAP)

    ; save binary data from resource to file (create not existing directory)
    _ResourceSaveToFile("C:\Dir1\SubDir2\binary_data1.dat", "TEST_BIN_1", $RT_RCDATA, 0, 1)
    _ResourceSaveToFile("C:\Dir1\SubDir2\binary_data2.bmp", "TEST_BMP_1", $RT_BITMAP, 0, 1)

    Allerdings weiß ich gerade nicht, wie ich diese UDF's "aktiviere. Ich habe resources.au3 ins Autoit Verzeichnis\Include kopiert und neu gestartet. Allerdings stehen mir die Funktionen nicht zur Verfügung ?( ?

    Kann mir jemand bitte helfen?
    Vielen Dank und viele Grüße,
    TOYY1

  • Wenn du das Bild in ein Binärstring umgewandelt hast,

    Convert to Binary String.au3

    Spoiler anzeigen
    [autoit]


    ; ============================================================================================================================
    ; Purpose : Converts any file to HEX binary string
    ; Author : Ward / UEZ
    ; ============================================================================================================================

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

    Local $VarName = StringStripWS(InputBox("Convert to Binary String", "Select a name for the variable." & @CRLF & @CRLF & "$ will automatically added to the beginning of the variable!:", "BinaryString"), 3)
    If $VarName = "" Then Exit

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

    Local $FileName = FileOpenDialog("Open a file", @ScriptDir, "DLL file (*.*)")
    If $FileName = "" Then Exit

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

    Local $Handle = FileOpen($FileName, 16)
    Local $BinaryString = FileRead($Handle)
    FileClose($Handle)

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

    Local $LineLen = 1024
    Local $DllString = String($BinaryString)

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

    Local $Script = "Func " & $VarName & "()" & @CRLF & @TAB & "Local _" & @CRLF & @TAB & "$" & $VarName & " = '" & StringLeft($DllString, $LineLen) & "'" & @CRLF
    $DllString = StringTrimLeft($DllString, $LineLen)

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

    While StringLen($DllString) > $LineLen
    $Script &= " $" & $VarName & " &= '" & StringLeft($DllString, $LineLen) & "'" & @CRLF
    $DllString = StringTrimLeft($DllString, $LineLen)
    WEnd

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

    If StringLen($DllString) <> 0 Then $Script &= " $" & $VarName & " &= '" & $DllString & "'" & @CRLF
    $Script &= @TAB & "Return Binary($" & $VarName & ")" & @CRLF & "EndFunc"
    ;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Script = ' & $Script & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    ClipPut($Script)

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

    MsgBox(64, "Convert to Binary String", "The result is in the clipboard, you can paste it to your script.")

    [/autoit]

    dann kannst du die Funktion Load_BMP_From_Mem nehmen, um das Bild in der GUI anzuzeigen.

    Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GDIPlus.au3>
    #include <Memory.au3>

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

    Global Const $IMAGE_BITMAP = 0
    Global Const $STM_SETIMAGE = 0x0172
    Global $msg
    Global Const $hGUI = GUICreate("Test", 600, 250)
    Global Const $idLogo = GUICtrlCreatePic("", 215, 10, 169, 68)
    Global Const $idButton = GUICtrlCreateButton("", 266, 150, 78 , 81, $BS_BITMAP)
    Global Const $hButton = GUICtrlGetHandle($idButton)

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

    Global Const $Bmp_Logo = Load_BMP_From_Mem(Logo4_GIF(), True)
    _WinAPI_DeleteObject(GUICtrlSendMsg($idLogo, $STM_SETIMAGE, $IMAGE_BITMAP, $Bmp_Logo))
    Global Const $Bmp_Button = Load_BMP_From_Mem(Merlin_GIF(), True)
    _WinAPI_DeleteObject(_SendMessage($hButton, $BM_SETIMAGE, $IMAGE_BITMAP, $Bmp_Button))
    _WinAPI_UpdateWindow($hButton)
    GUISetState()

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

    _WinAPI_DeleteObject($Bmp_Logo)
    _WinAPI_DeleteObject($Bmp_Button)

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

    While True
    $msg = GUIGetMsg()
    Switch $msg
    Case $idLogo
    MsgBox(0, "Information", "Bild wurde geklickt!")
    Case $idButton
    MsgBox(0, "Information", "Button wurde geklickt!")
    Case $GUI_EVENT_CLOSE
    GUIDelete($hGUI)
    Exit
    EndSwitch
    WEnd

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

    ;======================================================================================
    ; Function Name: Load_BMP_From_Mem
    ; Description: Loads an image which is saved as a binary string and converts it to a bitmap or hbitmap
    ;
    ; Parameters: $bImage: the binary string which contains any valid image which is supported by GDI+
    ; Optional: $hHBITMAP: if false a bitmap will be created, if true a hbitmap will be created
    ;
    ; Remark: hbitmap format is used generally for GUI internal images, $bitmap is more a GDI+ image format
    ;
    ; Requirement(s): GDIPlus.au3, Memory.au3
    ; Return Value(s): Success: handle to bitmap or hbitmap, Error: 0
    ; Error codes: 1: $bImage is not a binary string
    ;
    ; Author(s): UEZ
    ; Additional Code: thanks to progandy for the MemGlobalAlloc and tVARIANT lines
    ; Version: v0.95 Build 2011-06-14 Beta
    ;=======================================================================================
    Func Load_BMP_From_Mem($bImage, $hHBITMAP = False)
    If Not IsBinary($bImage) Then Return SetError(1, 0, 0)
    Local $declared = True
    If Not $ghGDIPDll Then
    _GDIPlus_Startup()
    $declared = False
    EndIf
    Local Const $memBitmap = Binary($bImage) ;load image saved in variable (memory) and convert it to binary
    Local Const $len = BinaryLen($memBitmap) ;get length of image
    Local Const $hData = _MemGlobalAlloc($len, $GMEM_MOVEABLE) ;allocates movable memory ($GMEM_MOVEABLE = 0x0002)
    Local Const $pData = _MemGlobalLock($hData) ;translate the handle into a pointer
    Local $tMem = DllStructCreate("byte[" & $len & "]", $pData) ;create struct
    DllStructSetData($tMem, 1, $memBitmap) ;fill struct with image data
    _MemGlobalUnlock($hData) ;decrements the lock count associated with a memory object that was allocated with GMEM_MOVEABLE
    Local $hStream = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "handle", $pData, "int", True, "ptr*", 0)
    $hStream = $hStream[3]
    Local $hBitmap = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $hStream, "int*", 0) ;Creates a Bitmap object based on an IStream COM interface
    $hBitmap = $hBitmap[2]
    Local Const $tVARIANT = DllStructCreate("word vt;word r1;word r2;word r3;ptr data; ptr")
    DllCall("oleaut32.dll", "long", "DispCallFunc", "ptr", $hStream, "dword", 8 + 8 * @AutoItX64, _
    "dword", 4, "dword", 23, "dword", 0, "ptr", 0, "ptr", 0, "ptr", DllStructGetPtr($tVARIANT)) ;release memory from $hStream to avoid memory leak
    $tMem = 0
    If $hHBITMAP Then
    Local Const $hHBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
    _GDIPlus_BitmapDispose($hBitmap)
    If Not $declared Then _GDIPlus_Shutdown()
    Return $hHBmp
    EndIf
    If Not $declared Then _GDIPlus_Shutdown()
    Return $hBitmap
    EndFunc ;==>Load_BMP_From_Mem

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

    Func Logo4_GIF()
    Local _
    $Logo4_GIF = '0x474946383961A9004400F700009292924040406A6A6BE1E1E1CDD8E35689B66499C6C3CDD8BFBFBFEDEDED3A648DDBE3ECA5BED69AB1C75A94CC33333579A3C8C6C6C699BDE0AAAAAAD0DBE5E6ECF1A7C2DD949DA67F7F7F848484F1F1F1B0B0B0B8C0C9E8E8E8FCFCFCA3C3E2212125B4B8C74C5863D5D5D5F4F4F45B687471727246719A515C684C4C8D00004236367C989898A0A1A1A4A4A49D9D9DCECECE8B99A55B5B5B6795B9B9B9B93647578BB4DD677684C8C8C800007B92ACC5606061A5ADB54365868D8D8D9ABBDB5252525783ABD9D9D97B8894C1C1C12A4764548EC757799979818BE4E4E499A2AE00006A000024010134D1D1D192B2D1707B85ADADAD416C96C7D2DC83ACD4A9B0BBB6B6B6000054E6E6E623237994B9DE7CA9D3606C78838C94ABC9E6DCDCDC49494A7DACD9000073FAFAFA65717D4D83BA9BADBE87919B56636EA8C6E343495627384A8AACCD3A5269749AB972A4D38989892A2A2ED4DEE727415B4B7DACF6F6F6CAD5E0F8F8F80000128787A74B79A2111111233C54EBF0F493A2B0BBC5CF9898B9181B26527DA6EAEAEA669DD06187A8C3C4D099B5D293B6D834537118187C344B616DA2D4333A4344515D9AA7B3DFDFDF8EA3B8797979788CA09DC0E2889EB48EB0D247617AA3B9CE0000609EA9B5385E8435597DB3B3B37691AB5B91BE9EBAD585B1DBD6E0E9AEBAC41B2434ABB6C1'
    $Logo4_GIF &= '67678981A4C26B92B00707071010317F868D90979FD0D2DB405C783C5E7E729EC44679AC3D5A751F34496DA0CC1C1C69B1CCE850719185AACD9FB6CB4374A233404DE0E7EE5959847375769599A1666769A1B4C6B0B3B52424562F51730B0B7D7A7AA724303B3154770D0D7693A7B9BBBBBC707981487DB1A7A7A781A7C93D566EAECAE70909648EA8C179A6D00C0C4E1414454F83AFFEFEFEEEF3F6F0F4F7B1B6BAB7B7B7A0BFDDA9A9C3C4C4C41019227AA1BFA1A7AC628FB34D6C8943437445457FCBCBCB2E4D6BA1A5A8ABABAB7C7C7D9A9A9B5089C1E3E9EF3B3B5FE8E8ED6B6B9F77779075A7D678A9D787B0D669839B90B8DEE9E9E9D9E1E9D9D9E110106B0E0E28000000FFFFFF00008021F90400000000002C00000000A90044000008FF00FF091C48B0A0C18308132A5CC8B0A1C38710234A9C48B1A2C58B18336ADCC8B1A3C78F20438A1C49B2A4C99328538ECC92224F1E532BF6E55049B3A6C71521FCE9F4A0E10B915E326D0A1D2AD1984E7FD8EA9020A101DF8816C3C4CC244A9564B22C2B56982BB7228BA264530DE6D9A96190D9B3589E460D5BB56D4645E6F2188257A76E1D0D09060D88F0AB5716B00353E8AC93B785A475EBE0981D80234335316E23572CB6025082A3FE3C8CA9BB5429DE0123D4F5AA95A3183C7F2406E11B14E001302001F0C98664454D26B692732F3467E8A80712793B081F3E1C'
    $Logo4_GIF &= '5FDE244288E4019439816C7C6004747821038BF024E724595BA2BB7BC22C397502FFC7475C3896F3E8D377B04E82307104113A6400323CC90816A46E7BDF3F301E369D4D61914412907CC3822F2838A2A0083B20E1020C034698846C024A9884000F5871DE802338F3C01590F1D75D32DE88874F84060A20020A687071C38B379081060A22F8E2821316E698040B0F0010E100424CD0880A218A289922ADE8944007032E83810868DC30440C7E286386190D5CF9C80593DC80C60E2C40A8230D3424E1830C03A4095A0B0F1069E491FAF873073E699EE3030A5C4CE90796C1E482C99F98E4124C968FF83144093BBC20849A6A060046121880A126247692E2E69B6D21895A12696E000C1A7A36100C260C946AAAA9810673A51243A0B14E048C0EFF00061000C8000624690A818000AA5CC11DA655E544028190B4800219675462869FA55AE0AC05693C8B6A2E84C6C00530CB40A22D24EB082089091968FB050C2D04D0C4153389A1C2BAECB67BA96EEABAABC2152119830D09037CF1450B22901143240DE4020A03DD3C9BC6C1083BDB0D03A0506B86327E9450020DFA566CF1174E74024C202A64F28F18206020F2C8246300C2AF92815CB2C83BA8F0D10A1AE0ABAFB125FCDBC0210377F3C107087B114D345E1CFC8105DD7403CA210DE8A04C0C9708B0CCC5FA0A014327BEC471AE54990480D9D63A81A1026E132D91C9'
    $Logo4_GIF &= 'D864A34C51D65CFBA30E1EE992ED3645C518320616420489023493008C73D11FE8FFFC81175E58306A1AD1A4B173DF3F1CDDC034914CD2860944D45DF7084E7CE3820056ABB0C44C2A6090F6515FC8D004D8115DF14000A8A7FEA145686F3D40067888B10408A9D7DEC444BDD4318810232060C2223744A2C32187FCD00D25C8EF9C8B12EA188280386658B03325DD48F003224F285D09396DC031C2F7239CB341066080D084E65335E1C3E7A8E1000C134552C404025CD3C07645AD1FA5C1AE782CD139D71EE807E914528C566800129483431B2EE1091D3C01113F90800491478948B0A2157DC8A03B42E08743204F823FD0C2212CC1387B40030D2E001F02E0400A7ECCEB365399DF51B041C3FF604303D989DD456488993AB040870611C315FFD8E5AB83E42F33F8E0860062F7BFAD9DA31F666B480A06619F117402056D384225D8F0402D684182129CC62AF2D1876C68431B7DC04229620046097811119660C3293CD18336F822024E70C23224E1C24C4885207880816FEE70070FFCA70E4E70011405228626F4E39190EC47131A1949484E92873AC1C600D881077411E40A4C00011046B68307F4E35DFF38A20792B844FF790E331DC0413F4004912A2440084E804106167189429C820D96B8873085A9857B0CE10F1528E319B35101399CC113C51CA60D2C818B3992C31522B8911388000052D0B220FDE861023470'
    $Logo4_GIF &= '87FFDC61042E4885C7FED1C4AD9DF295EEDC43000499C9DFE000757B0851131E40FF3FAE2500037B70994054994413E0810901680166789200D49DCC2159C0552EAD80824490A3101060433D6CC0D17BD8E01EF6B8C0022A90CC0CF6A1020BF80617DCC0D196D60317CF98C12D7AB0086644000638880210BE3990D9F946031DD8C01874728720C541A0ED3C0A0C24094FD0F5436BEC234123E8D5841DB04F279078C0ED5209D59D14140FE1641F364C30BA86F402393080010B6AE08A1314001654A84728E63A574F904114BCE0853B484A5277F082024AE00215E81A0A2A6C0102E338420F6481820DC0E01C5630812AA2983F0F24001251B8834EC630804E988B734DF5C7085EC0D4AD8D200A4FE51A367E23844E1C55054058286892A0D9A3FF24600F1E2328370C1A56CCAC165FCB00C2241BA2840138E11CDFF045117A70840218600B61886E742180020E2C80170B58403EF2915DEC8AE200CC388274C3400F6A40A0008290822C16C18273E000013EF0265BAE60D5CDA6050E24D8490782CB04D0628604110040698F42021CB023B548B1611D20B10C00F802042AC003248E72077201A0130318AA9232D05F824616AC3BF94F663A60205F04007E0C49C639BE708E73744204E8E8011D0AF08937CC831E38A6C72D582187EC8A620A7FE0C00128B0DD7C50A0142238023DE6C1E4371800BD279045112441847310E1'
    $Logo4_GIF &= '05538D5F3BEFC01801D0209309888024749854000BB8094D35733F40D089248CE1FF3F9625C23A1CAA8207602601914D451C06E19B2410610F62EB2A129578D00D38810422462400C01000F3C50F215970C20870F00D76D420115298F1271CC0883774FA165C2080284421870354E10CCC50C21F082007524F81158E3040A71941080740F9154540C304704004670041730461C20628AC2B192C83C0E7801D64CA1CE0018B27023E38251EFA39E24E00010F78389F097C13D41D80D83703B0C25175BB44153021CD1158473FB2AD9F85AC20971158C62AE6908813CCD8080E2004211821885DFC61D43F2E45AB7621021E1C800014900305FE500259E8BBD64628001D4EB0097438C20711F846147630D96053BB0E23B0C2038E3D1827B46091CCFF3E33BAA3BD044C7AA0039DF0762696A03E6E776289BDF5C71820B101E192BB7F65FE46066629864723A4178FFD8615B830074E64BA1DF87680030CB00825249C027618C519D0D00868D4000AA39802C2B15E8A5DF440EA0E30423B265EF11AD894085100862ADAFD0F3C5C463C3098C003E0794E67EC815E2977366AA00D459777C00AC0E8DF3F0CFFE19C8FE10BEA000313AE20E85512DA95FFFD06CB1F620A1C4480081B4041D34F108B321821EAC8E0821D144E010E586B173598F83162F007B153800007880129E89076B5B31D1D73E002111010055ED13DE71A8840'
    $Logo4_GIF &= '0B5201CFC747E1A8EC44B7CAFF4BF89653DBF2AD5CFCF5BFEAF82F4C40F2945F28FF2B81BEF2453A441E9426C28B9B2E85D29FDE010AD8C590294081033CE2063558C3098C608057D4C0E004807004C001685004A7670465100BBA50717C800644B00CEA20599EC45533940008C002FDB06D9B950456205C39107868467D2CE772E3C71D24B85BDFB6595FE00CE0577925C86C9B777EDF8000CBB07E4E577A505706A4F00863676A482002C7200BCE956F6D40067F6007014800535076E8707A65D00C52C08068408313200081308195850F568001088644082003F00382E5677DBE5182DA578628D87D2C38792E787930687E0D610A345883A27783650075E8000576407F5977065CD0088B70028210048428086BA009489884077001A42005EDFF908052C009E8C0075CB00C34E00C72F74DEDE40158D009062568613666EA227D82076023B87D84061927C85B98F1786B187E68D84A6F18450A610EDC40269DC0057C800C0A100BCDD00EC8E008F347007FA00450A00635407028B08C342202CCB087B717807F40067C500690C80945E07634C00D2EC0711358733B3108D0860776466030E003E4477DD34760D57782D9B78A29A8732BD882E2E78663F810EFD009DB6805ABC007C4A000BAD00C0A400A1CD0839A307035F007B7178D49487FF4178076500A6A5004CDA00B0A800C73E0085D40039DF00240D02B31446DF7'
    $Logo4_GIF &= '820FEA967388A44898C78EEBF86CA7188B8A078F6A488F2E99922C09870C510B51FF40035660052F3007E8B009BA100BB31003D0B884674006B0A709A2905D4CA95DA4E6900E79007E400AC46091C4C00725D00256B00100602EED1648574561233001203044A41882ECD8925E757967B896AC7814AE28936B298BF7E810C9A0959D60052F56044E3707287070F5370AAC70036AD0064840014C59644F490076300507E098077000A30005A4B00992380BABD0099D300119A055EBF40F3977558FB7016D2286225878A8B844AA888A6FA982AFD88674799AB498103980041BA0999D0005FE5804C71076A5B02547A9207F596A1C509CC5390AA3500A55C0039AF0084AF09C7E700143B00BB38091B330011BB0012D60021CF32B20B3353494361EFF90043400044C609A69899A33D99683D69A3A27042E209783169BE9399B089103E5E00CD9B901CEB00645000E25800432C22209D20835D0054A7001ACF00B17D0A00A7A065D80045040065C500233B28C0A12087CC0078EC00D1B10052C2003FCF04D4794141DC03B5F3008750067834004EF8396CFB69283A796484403EFB87D34E09EE7C40E27068B73998E04860331E810B5F002EA909DDC200273C007A4000E81400A507A0C6B7009B7C0225CC00C48B00A5DD005AB80043750020952038D700CC700A581000EE0400A7C300B5DD00951E00C70602EDF445F0BD50108'
    $Logo4_GIF &= 'C00E00E00C3090001E80141A8003EB906D69760E2707A333AA9E3B9100446050AAFF386C604604189082F7622756F37334891A307060F68910628001CEA00E51B001BF300BE8C0090A20057A700D055000E36000D44005C084330C6001A572343AF00CB0E00633F00905700D7A609545C007BBC00D51A00E2F6002E6D36E49350623C0A30F00062CA00147510730405A867A073E518AED2892242004E8C81DED742F42C049BD655934B00E10E6A3F309A444C56036C91039F00EECE00C13300134A0A4BC4807EDB069FB360F61F05112F037D1600BB650381F2001F7100A61F006846000B6460752609D6DAA0E2EE00360E04245226C3D748E817050BE8019E734017B60A83CA10101D00FD476A864F8534900029244A709F61B1E204FD33AAE3BFFD00F63039BEC9A19780104FD30790FB10F19D002F47AA4FEB90927700DED6000B2E6AF36A0059420B0046BB0081B0A5BC0B006F009D76091C12A02CB3001CEF00255732E618149A8710E700061D72A04EA7054B1954957658A50D4042FB0137D8A19EBD0047B800531F3660034001BE00B0FD03F960AB31E6048984103FDE510F10A002E50AF9DB00AA40A90D7F00906400B6F1006A1F045526B0B4173B0F76058B490B5BE2A0557B906C2F0A62D0007170B6C03D10FD28A0D099000E49901E0B02E1A88171D0003CE602E7B4018E3C41483D00109300677801709300034'
    $Logo4_GIF &= '30744B70053290045F000958304E840103A2D304020003233000095007FF359692FF0004A94024AD031C83101A89B70420D301FA920483D0BDDD0A0740D410D2E00BECE002CEE00C088006FE88AA957BB95B500F882001510B389FDB0D5A6003610001B4C0AB10CB0973300B67D009CEE0022C2000E6C353A0E90F426005EA30012E0007C080B359830F1A07B6EC800127D604BE408308800056D0023E80013B30015150AF212C008B746E2EF002F85BAF2FA0C24CD07226F0B856800038D0620830013E200060B0074C701B59F3A71B00B6417C6DDCD1044010B6443B01140B0732A0788C3B0C1970BF2EE002CB20027CE0747A1004960B01010C41517B38088C0854C0C03350007A2005B886993470C6EC30672E643659430334BC0332200340FFE0B362F300CEE00B889CC840207999D004329001DF22003210007BD008C080C888BCC88B9409080504897CCA40F000F0D372AE6102BE200992E00B02B00360F000A930793391090FA00E9210C98A0C068A97034D1007B372CABF2CC60E21066AE0032FD0022DE0020880026B8CAA41D0AAB0F00CF5F0403FB0CDD7134710000B335008E9D5C7ABB00CCECC0EF3C10F4D407702E14895F44843FC0FEE5C497840242DB7077190CF7B70504CF0CE3FEB9D11F6CE930719C28C077B0002F91C0720B007EBD6316131CF91946D21920357806DF43C5C0F9103D2B0033EC00ECE'
    $Logo4_GIF &= '0CCDFC9B080AA00782300E33000BA7800B5CF4044F1047CF100E6E300E41A0073DFF808D6BD005E6DC022F00C6193C9BB2B304401DD49BC348421DD47F940334C704E739734557D4401D1639D0D445FD478C34444ACD04E7C3D4B8F1D353CD1651EDD4549DD1D520001DEDCC2D4004675003E8F00AE4A0078560D26E100EA730D7E100D3A820CEB7F00A89300722B001DC70CE3EB00371709E430D12511DD61B91038A5D74882D1462600D020007ECF002CDAC8F25406F3D400E47100485800A9EEDD9855008473053EB550343100113A0D32C000782BDD403042C91F1D83B90010040D93EBC0C51C0058B9008AED003B77004C00DDCB7400EAF000D8B000D4850833A8DA718200371D047AF0DDBB15D0D4020093EC002B68DC6CB70013780456DFF000DB2200BD0F0DD6880043CF00D9DD00293CD023E10BE20B0D44627DDDD21440F2000B4CD02EC90DF2F30011E9A0EBFD00543D00567F00B3CB00D56D0C32FC00E2C000019000C011008591DDDF29D3299600D60002E00C002F83DD9CE200CCB4004208E0034C09F09AEE00C6E0240F0DCE753D813FE26B2530DA400042680013E90E11B9EDF389EDF1A0E00332C0029AECEF3D2D82D2E22519D09D5100801200326B00E19E003350E0050CEE33E9001EB60029BFCDC2E7405EC3CE4C052E457A00AA4F0AC40B003C0200066FEC993DC688100E45A2EE45C8E298B9D0957'
    $Logo4_GIF &= 'F0E5AAA00A4F0A02A4000281A00AEA7C3E73AEBE12FEE698D2D4723EE7EB32447320EE2B802EE88C5E108A7DD88C5D748ADDE8945EE9967EE9989EE99ABEE99C1E10003B'
    Return Binary($Logo4_GIF)
    EndFunc

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

    Func Merlin_GIF()
    Local _
    $Merlin_GIF = '0x47494638396144004700F70000FFFFFF1831711C357D182D6D1C3982182D691C35791C3986CACACA1831751C3D9614246118316D14286914357D1835791C398A183575204192142D65C2C2C2BE9296142459203D92AEAAAEC69A9AB2B2B6BAB6B6CACACEBEAA41142D7520398A395D9618358614317DA29E9E1028751C3D8A0C2455797979A27D7918316941699ECEA2A23D4955101C4955595961656100041C86828214358E182861B6A23DEBEBEBBEBEBE142D71E7B2B220419EB28E8E10246D2D3959DFA6AA10245D8E8A8EA29641696969CAB241202D49082065C6C6CA0C1C516165556979927D61616186B2183179AAAAAAC6C6C2969296DBDBDF243D718A71712031591C3582DFAEAE8E7D86A2A6A6314579866969AA828214285D20316910246592928E1031860410353D5D92F3F3F328499A14399A14203D3539497D754986868E0C2059A28282E3E3E3081024AE9A3D967171454545355992494D61AE8A8E7175797D869ED7A2A26555554D4D51B69296DBD7D7394969928A4D555D65D7A6AA8A7D39142855CAA6AA203982EBCACE5D6569AE9A359E9E9E715959183161B6C2DF5186C22D4169928A55414965BABABE615971AE9E9E0C18394559755979AAEBE3DF31498A5179A22439694159A6313128A6964D9EAABEDFBABE314982514924081849495565A696396969610C287D453535203571968286717155'
    $Merlin_GIF &= '7171694571A64D5D861C3D92D2BE41514141DBCACAEFB6BA49393D24459A315586394561082471C6B649614D55B6AA5D1C2D59BE969A3D49717D7959614949CAB2AE514139244186E3C6CAF3EFEB756935797965867D55595D4561758AFBBEC23D659A1C357161551CBAAA49413D456D798A7D8282617DA2141C35000C2820283D24418A79753DE3DFDB24395D9692695D6986283965B2B2B23559968A8279FBFBEF8692AEEFD74D516D96C6B6559A8E45353541A69E5D82615D967D79454531D2BE4D92864561869E14244D554D456D6555393D555D61613159A6B286867592B29E8A351C316DF7FBFBFFC6C665757D1C397D555D7DCECACA1C3979182D71BEC2CE4539206D611C866561FFFFFF21F904010000FF002C00000000440047000008FF00FF091C48B0A0C18308132A5CC8B0A1C38710233E74674CA2C58B08C5E4B8900F16C68F1651697C152011C8930E977DD3A6F100CA970BC5C9C92166D92431307316540149C2AB1CDE64EA1CFA2FDA87483968CE01878E684E246A7E591A9369DBBE664E5F669254E357264BD3BAE2819715243C0A3FAA90DA45CF519518562894FDA8A451851E3DA8E0C0DBA34D3D25733156A0A32990AFC281FED02115F862333AACE6593A24F550183EB71A5BAC42C7579843785A1D7A52435306249A1F12BB1567452B568134E10864184706478C5333248645C70A3E545A151BDE8A'
    $Merlin_GIF &= '0F9F0C59C645D2BD70CE381D192A00C7419DCA0AE851A200669E905B1B1D59A264FFD171A7C29D3869B0544893663BF7834AD2E878A7AE1096FB5892D4D185FCC77B8555E8E0883AAEF0B2CA81AE8812C31F59CCF15F4255E013060241ACE2CA856E7451430DBBA0F6E0418CFC5243183570D0055C4F90D855261F1AC44D586AE0F1C4346AA8F1C41378C818A3832D0E840D1E1C144101214EFC10430C4E60C0880D08E063458F0229C10436D830614A21B75041051F59D47186154C6060857B1FCE51A413419CB0CB1F155470CB1F8EB473C20F3F10D2548F679C70423B31E0C301051B6CC008051CD810449A319C01A529EDB8C00C0708441A24A44D3212840B413003252EE198B2411191861AAA9056B4C303253D9E3204343130C108A8A246FF4A81065604F185212DBA13CB258F04E1043636C03A2A234CFCA0CC1A5FE4F3E03DB598334B1F6EC44008B0C2526003064E9832C4140494100D18DCF522432DDD74534D19A074C1C4061414E1AE0DD88C10831B054860EF0507BC919A0AD1C880CA37D598730509653033EDA0D6128BE6B6537C7081BD074CD258360294708135937821483B32D8F282BA1BD8400123D8101283324B8883CB14164B700104F69C52960A0F5C60732A1008E0413E071C50C60907DBB001B62E4C708F399E784080C33643207156BD9470EF070404208F008094F0801D203342EB093CC8608A'
    $Merlin_GIF &= '397AA4B0440810A4F28A045364E3943153D82B412A5E3CD04002F6007240098604FF31ED06D83861C703105C318B10476CB1C726D5D4A3C0058038958FD46B07014A0A2CE0220001807C00010F3160808D152FC853C20121E4A20A382C60924C300AACDDF650F55CA1B602F5D4D2411FEB94620FE77B2F01C70818FCC043CF3D8B20CCEE8360E2F0BDBDE8D40C2EA9DC1B0D208B00B345289BEBBD770A273001C7143D0302880022E4314C1F1D4002814F1240103D4C9BBC7F2F014B7051C60D09189037F221488420187000F3018200F610C0120AE086580822040FB3D71440F01228340010AF78C5053E20007DF8410AFA08C0037EE73DADF9E0000448E10113688014A4C30709C89A4F2E20002D80EB24D780C11A5A6080541CC00033184201FF18C0800808200421F0DE01A7600F6EA590850C68413A182000089460028F58C31A6E884318E8900706F0C0AA0650800124E00182B84212CD470001B8F1776D34C00306E087474CE0015080C61A74C8459424E20BCEE045387CD0023F04A000050880084C910C35AED08D6E4CA1000C60802D68E11146B0052F44B10632F4112588384521508002657CA100FA2840031409095528220492A42424DD28823DB8800B8F20C328DB0087ACB4860A7480430306708D44DC2014B998C52C1E294B01E4037DA1D0830B88900E72E0E0388A220A12B290811564200EF220A6191251'
    $Merlin_GIF &= '8A0ECC2219BF73A32C45100C458002141D580711E0E0CD1554801CA81A0A12DE91FF810CD4E116A318C004A4C1860E744008C110813A2949497B2842151DA0011086D18834446105B7408153908002D69021035018400358400321084118906428431F600045449406D2684414D8B18238A0603943B1863FB2F38524E0A2003358C0223CE10903A4F4014865E812842104894A610FEC18421AFC5108A750A20E3B8506341800542D34C0032260E94A2380D40788E00542D0831ED8C0834E7CA10EE4488237B2428946D022099C40A416B45080049075AC11202B4BDBF182048C420F7048072D0AA18BB9CEC50EC0E0C43576E003BE06E0AF728C4002361BD80878C00309F040256231047570E21E8808CC30E2818C3E9881053E48A45FCBBAD900FF6CF6B6B5D5470386800C7E78642E8860413FFAF00970B821B60CB02D529790800038D7B9B7752E5787C08974FC762E9740C627CEB10534F035B99BBD022E3C10007DDCE0B9CF256201A4A08E4E5C372B60E0871DCC30081E547688B6F5401E30510912546211E7452F03C8A88572E432302A4807170A60063BA0C102654CAE7E69908B2300C11301962E570B5060673C2230C630C1041A90026A5800C22918803E46E10920B08106A5B80111931B00F572D80816480788455C8009CCC0027C2D803C4A01840EB0E1C87990F18C67ACD774580057733184052640E519F821'
    $Merlin_GIF &= 'C80CA8C41ECC70641A80A312FA604098990CD47418410B08DEEB0C66A0852B237269C0B258041BCE710433B840C9649E409BAFA002CDC0020A50D0420BA6FCE61BC0810D89D8C10EE4B1641B4FC0022A482D734E01060BC416913758443B1AA0CA05AC79060D6840507D9082147C48056F28B53C183D80141862132088B5AC63FD069941E9D6B84E484000003B'
    Return Binary($Merlin_GIF)
    EndFunc

    [/autoit]


    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hallo UEZ und vielen Dank für deine Ünterstützung das ist ebenfalls eine Variante die ich in Betracht ziehe.

    Könnte mir trotzdembitte jemand weiterhelfen und sagen wie ich die resources.au3 "aktiviere, so dass mir die Befehle zur Verfügung stehen?

    Vielen Dank und viele Grüße,
    TOYY1

  • Du musst die resources.au3 includen, d.h. so würde ein Code aussehen:

    [autoit]


    #include <resources.au3>
    ;#include "resources.au3" ;wenn sich die Datei nur im gleichen Verzeichnis befindet
    ....

    [/autoit]

    Dann sollten die Befehle aus der resources.au3 zur Verfügung stehen, wenn sich die resources.au3 in dem Include Verzeichnis befindet.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hallo UEZ danke für deine rasche Rückmledung,

    das habe ich gemacht und das Programm auch nochmal neu gestartet. Allerdings stehen die Funktionen nicht zur Verfügung. Könntest du das bitte mal probieren? Wenn ich die die Resources speichere sind da noch andere Dateien ?( vielleicht müssen die auch in den Include Ordner. Es gibt jedenfalls keine Hilfe oder Anleitung was ich bspw. mit der
    api Datei oder der properties Datei anstellen soll. Für eine kleine Hilfe wäre ich sehr dankbar.

    Vielen Dank und viele Grüße,
    TOYY1

  • Die anderen Datein sind nur damit die im Editor die "Tooltips" hast und im Example-Ordner sind die Beispiele dazu.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Vielleicht postet du mal dein komplettes Skript inkl. den Anhängen, damit man sehen kann, was du so probierst.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Warum lädst du sie z.B. nicht auf TinyPic hoch und fügst den Link dort ein oder lädst das Bild vom Prog automatisch runterladen und fügst ein, und wenn es beenden wird, löscht es das Bild.

    Hat er bereits geschrieben warum er das nicht will.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hallo an alle und danke für die Hinweise...

    Das Skript hochladen brauche ich nicht. Mittlerweile bzw. z.Z. geht es ja nicht um das eigentliche Problem, dass ich gern wissen würde wie bzw. welche Funktion ich dafür verwenden kann, sondern darum, dass ich nun erstmal die resources.au3 lauffähig mache. Die Datei und auch die anderen liegen definitv im Imclude Ordner von AutoIt...dennoch stehen mir die Funktionen nicht zur Verfügung. Wenn das Theam geklärt ist, würde ich gern das Ursprungsthema aufgreifen. Geht es bei euch?

    Vielen Dank und viele Grüße,
    TOYY1

  • Und das Ursprungsthema bezieht sich auf...09.08.2011 15:37 welchen Befehl ich aus den Resources benötige, um
    FileInstall("D:\_Temp.jpg", "C:\Temp\_Temp.jpg")
    nicht mehr verwenden zu müssen und um das löschen von Bildern vor dem Schließen des Programms zu vermeiden.

  • Hallo UEZ danke für deine rasche Rückmledung,

    das habe ich gemacht und das Programm auch nochmal neu gestartet. ...


    Du musst dein Skript kompilieren, wenn es funktionieren soll.
    Sieh dir mal das Bsp. "resource_test.au3" an. Von ganz oben bis ganz unten, dann solltest Du es verstehen.


    Gruß
    Greenhorn


  • Das problem kann man auch folgendermaßen geschickt umgehen.

    Im Beispiel Enthalten: 2 Bilder:
    1. als Komprimierte Ressource (So siehts nach dem Komprimieren aus)
    2. Als direkte Ressource.

    Die Bilder werden mittels _CreateImageRes geladen (ok, dabei wird eigentlich schon viel zu viel gemacht, aber ich wollte die UDF Funktionen nicht zerlegen...), in für GDI+ verträgliche Formate gebracht und abgebildet.

    Ressourcen von Dateien kann man hiermit holen (und bei Bedarf komprimieren):
    ( Komprimieren dauert bei Größeren Sachen Ewig. Deshalb lieber erstmal mit kleinen Bildern die Funktionalität Testen. Das Tool hab ich heute aus Spaß mal geschrieben und hier findet es direkt Verwendung^^)

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $Direkter_Pfad = False
    If $cmdline[0] Then $Direkter_Pfad = $cmdline[1]

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

    Opt('GUICloseOnESC', 0)
    Opt('GUIOnEventMode', 1)

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

    Global $StringLaenge_ = 4000

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

    Global $hGUI = GUICreate('Datei zu Ressource', 330, 55)
    GUISetOnEvent(-3, '_Exit', $hGUI)
    Global $hButton = GUICtrlCreateButton('Aktion', 0, 0, 100, 30)
    GUICtrlSetOnEvent(-1, '_FileToRes2')
    Global $hLabel = GUICtrlCreateLabel('Keine Aktion...', 100, 8, 140, 32, 1)
    Global $hCheckBox = GUICtrlCreateCheckbox('Komprimieren', 245, 4)
    Global $hSlider = GUICtrlCreateSlider(0, 30, 330, 25)
    GUICtrlSetOnEvent(-1, '_Slider')
    GUICtrlSetLimit(-1, 4000, 20)

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

    GUICtrlSetData($hSlider, 4000)
    GUICtrlSetState($hCheckBox, 1)

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

    GUISetState(@SW_SHOW)

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

    If $Direkter_Pfad Then
    _FileToRes($Direkter_Pfad, 'ZielUnnötig.txt')
    EndIf

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

    While Sleep(20)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

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

    Func _Slider()
    Local Static $Read_Alt
    Local $Read = GUICtrlRead($hSlider)
    If $Read <> $Read_Alt Then
    $Read_Alt = $Read
    GUICtrlSetData($hLabel, 'Stringlänge: ' & $Read)
    $StringLaenge_ = $Read
    EndIf
    EndFunc ;==>_Slider

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

    Func _FileToRes2()
    _FileToRes()
    EndFunc

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

    Func _UnBlock($a = 0)
    GUICtrlSetState($hButton, 64)
    GUICtrlSetState($hCheckBox, 64)
    GUICtrlSetState($hSlider, 64)
    EndFunc

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

    Func _Block()
    GUICtrlSetState($hButton, 128)
    GUICtrlSetState($hCheckBox, 128)
    GUICtrlSetState($hSlider, 128)
    EndFunc

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

    Func _FileToRes($Quell_Pfad = False, $Ziel_Pfad = False)
    _Block()
    Local $Read, $Len_Alt, $Ressource, $Len_Neu

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

    If Not $Quell_Pfad Then $Quell_Pfad = FileOpenDialog('Datei wählen', @ScriptDir, 'Bilder (*.jpg;*.png;*.gif;*.bmp;*.*)')
    If $Quell_Pfad = '' Then Return _UnBlock(GUICtrlSetData($hLabel, 'Keine gültige Quelle'))
    If Not $Ziel_Pfad Then $Ziel_Pfad = FileSaveDialog('Ziel wählen', @ScriptDir, 'Res (*.txt;*.res;*.*)')
    If $Ziel_Pfad = "" Then Return _UnBlock(GUICtrlSetData($hLabel, 'Kein gültiges Ziel'))
    GUICtrlSetData($hLabel, 'Datei wird geöffnet...')
    $Read = FileRead($Quell_Pfad)
    $Len_Alt = StringLen($Read)

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

    If GUICtrlRead($hCheckBox) = 1 Then
    GUICtrlSetData($hLabel, 'Versuch mit LZ77...')
    $Ressource = _Ersetzung_Comp('1' & _LZ77_4096_16_Comp($Read)) ; Beginn ist eine 1 -> LZ77
    ConsoleWrite('LZ77: ' & Int(100 * (StringLen($Ressource)+1) / $Len_Alt) & ' %' & @CRLF)
    GUICtrlSetData($hLabel, 'Versuch ohne LZ77...')
    $Read = _Ersetzung_Comp('0' & StringTrimLeft(StringToBinary($Read), 2)) ; Beginn ist eine 0 -> Kein LZ77
    ConsoleWrite('Normal: ' & Int(100 * (StringLen($Read)+1) / $Len_Alt) & ' %' & @CRLF)
    If StringLen($Ressource) > StringLen($Read) Then $Ressource = $Read ; Wenn LZ77 größer -> Verwerfen wir die Arbeit !
    Else
    $Ressource = StringToBinary($Read)
    EndIf
    $Len_Neu = StringLen($Ressource)
    GUICtrlSetData($hLabel, 'Datei wird geschrieben...')
    If $Direkter_Pfad Then
    ClipPut(_Trennung($Ressource, $StringLaenge_))
    GUICtrlSetData($hLabel, 'Kompression: ' & Int(100 * ($Len_Neu+1) / $Len_Alt) & ' %')
    Sleep(1500)
    Exit
    EndIf
    FileWrite($Ziel_Pfad, _Trennung($Ressource, $StringLaenge_))
    GUICtrlSetData($hLabel, 'Datei geschrieben...')
    Sleep(500)
    GUICtrlSetData($hLabel, 'Kompression: ' & Int(100 * ($Len_Neu+1) / $Len_Alt) & ' %')
    _UnBlock()
    EndFunc ;==>_DateiToRes

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

    Func _Trennung($String, $n = 100)
    Local $Len = StringLen($String), $NewString = ''
    For $i = 0 To Round($Len / $n, 0) Step 1
    $NewString &= "'" & StringLeft($String, $n) & "' & _" & @CRLF
    $String = StringTrimLeft($String, $n)
    Next
    Return StringTrimRight($NewString, 5) & @CRLF ; Das Letzte Mal braucht man keinen Anhang. Der Zeilenumbruch ist, falls man mehrere Dateien hat.
    EndFunc ;==>_Trennung

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

    #Region - Interne Benutzung
    Func _LZ77_4096_16_Comp($String)
    $String = StringReplace($String, Chr(0), '[N]', 0, 1)
    Local $WortBuchGroesse = 4096, $LexikonZeichen = StringLen($String)
    If $LexikonZeichen > $WortBuchGroesse Then $LexikonZeichen = $WortBuchGroesse
    Local $SuchFensterZeichen = 16, $Lexikon = _Nullen($LexikonZeichen), $SuchFenster = '', $len = StringLen($String), $OptimierterString = '', $Suchlaenge = $SuchFensterZeichen, $StrInStr = 0
    $SuchFenster = StringLeft($String, $SuchFensterZeichen)
    $String = StringTrimLeft($String, $SuchFensterZeichen)
    For $i = 1 To $len Step 1
    If $SuchFenster = '' Then ExitLoop
    For $o = $SuchFensterZeichen To 1 Step -1
    $Suchlaenge = $o
    $StrInStr = StringInStr($Lexikon, StringLeft($SuchFenster, $Suchlaenge), 1, -1)
    If $StrInStr Then
    $Suchlaenge = StringLen(StringLeft($SuchFenster, $Suchlaenge))
    ExitLoop
    EndIf
    Next
    If $StrInStr Then
    $OptimierterString &= Hex($StrInStr - 1, 3) & Hex($Suchlaenge - 1, 1)
    $Lexikon &= StringMid($Lexikon, $StrInStr, $Suchlaenge)
    $Lexikon = StringTrimLeft($Lexikon, $Suchlaenge)
    $SuchFenster = StringTrimLeft($SuchFenster, $Suchlaenge)
    $SuchFenster &= StringLeft($String, $Suchlaenge)
    $String = StringTrimLeft($String, $Suchlaenge)
    $OptimierterString &= Hex(Asc(StringLeft($SuchFenster, 1)), 2)
    $Lexikon &= StringLeft($SuchFenster, 1)
    $Lexikon = StringTrimLeft($Lexikon, 1)
    $SuchFenster = StringTrimLeft($SuchFenster, 1)
    $SuchFenster &= StringLeft($String, 1)
    $String = StringTrimLeft($String, 1)
    Else
    $OptimierterString &= '0000' & Hex(Asc(StringLeft($SuchFenster, 1)), 2)
    $Lexikon &= StringLeft($SuchFenster, 1)
    $Lexikon = StringTrimLeft($Lexikon, 1)
    $SuchFenster = StringTrimLeft($SuchFenster, 1)
    $SuchFenster &= StringLeft($String, 1)
    $String = StringTrimLeft($String, 1)
    EndIf
    Next
    Return Hex($LexikonZeichen - 1, 3) & Hex($SuchFensterZeichen - 1, 1) & $OptimierterString
    EndFunc

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

    Func _Nullen($a) ; Damit das Lexikon voller Nullen ist.
    Local $n = ''
    For $i = 1 To $a Step 1
    $n &= '0'
    Next
    Return $n
    EndFunc ;==>_Nullen

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

    Func _ZeichenArray()
    Local $sZ = '!"#%&,-/:;=@GHIJKLMNOPQRSTUVWXYZ_`abcdefghijklmnopqrstuvwxyz~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ', $UBound = StringLen($sZ), $b[$UBound]
    For $i = 0 To $UBound - 1 Step 1
    $b[$i] = StringLeft($sZ, 1)
    $sZ = StringTrimLeft($sZ, 1)
    Next
    Return $b
    EndFunc ;==>_ZeichenArray

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

    Func _Ersetzung_Comp($a)
    Local $l_alt = StringLen($a), $l_neu = 0, $st, $er, $n = 0, $_____Zeichen = _ZeichenArray(), $_____Zeichenmenge = UBound($_____Zeichen), $t = TimerInit()
    While 1
    $st = _Analyse($a) ; $st = Meist vorkommender String
    $a = StringReplace($a, $st, $_____Zeichen[$n], 0, 1)
    $a &= $st ; Und rechts an $a angehängt. $a = Urspringsstring
    $l_neu = StringLen($a) ; Neue Stringlänge
    $n += 1 ; Durchläufe
    If ($n = $_____Zeichenmenge Or $l_neu >= $l_alt) Then ;Nur Abbrechen, wenn tatsächlich nix geht. (nicht wenn der 8er nicht klappt...)
    ExitLoop
    EndIf
    $l_alt = $l_neu
    If TimerDiff($t) > 500 Then
    GUICtrlSetData($hLabel, 'Komprimiere... ' & Round($n / $_____Zeichenmenge * 100, 0) & ' %')
    $t = TimerInit()
    EndIf
    WEnd
    Return $a & Hex($n, 2) ; Rückgabe ist der Komprimierte String und die Anzahl ersetzungen
    EndFunc ;==>_Ersetzung_Comp

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

    Func _Analyse($sData, $l = 2)
    Local $StringLaenge = StringLen($sData), $Top[2], $StringPart, $Replacements, $BenutzteStrings[256][256]
    For $i = 0 To $StringLaenge - ($l - 1) Step 1
    $StringPart = StringMid($sData, $i, $l)
    If Not $BenutzteStrings[Asc(StringLeft($StringPart, 1))][Asc(StringRight($StringPart, 1))]Then ; Damit keine Strings doppelt getestet werden...
    $BenutzteStrings[Asc(StringLeft($StringPart, 1))][Asc(StringRight($StringPart, 1))] = True
    StringReplace($sData, $StringPart, $StringPart, 0, 1)
    $Replacements = @extended
    If $Replacements >= $Top[0] Then
    $Top[0] = $Replacements
    $Top[1] = $StringPart
    EndIf
    EndIf
    Next
    Return $Top[1]
    EndFunc ;==>_Analyse

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

    #EndRegion - Interne Benutzung

    [/autoit]

    Edit: Das Funktioniert immer. Obs kompilliert ist oder nicht ist wurscht !

    lg
    Mars(i)