Working example for loading and displaying a script embedded PNG image file:
Gui -Caption Gui, Margin, 0, 0 Gui, Add, [color=red]Text[/color], x0 y0 w164 h65 [color=red]+0xE[/color] hWnd[color=red]Pic1[/color] ; +0xE is SS_BITMAP GoSub, LoadPictureToBuffer ; and initialise nSize hData := DllCall("GlobalAlloc", UInt,2, UInt, nSize ) pData := DllCall("GlobalLock", UInt,hData ) DllCall( "RtlMoveMemory", UInt,pData, UInt,&Buffer, UInt,nSize ) DllCall( "GlobalUnlock", UInt,hData ) DllCall( "ole32\CreateStreamOnHGlobal", UInt,hData, Int,True, UIntP,pStream ) DllCall( "LoadLibrary", Str,"gdiplus" ) VarSetCapacity(si, 16, 0), si := Chr(1) DllCall( "gdiplus\GdiplusStartup", UIntP,pToken, UInt,&si, UInt,0 ) DllCall( "gdiplus\GdipCreateBitmapFromStream", UInt,pStream, UIntP,pBitmap ) DllCall( "gdiplus\GdipCreateHBITMAPFromBitmap", UInt,pBitmap, UIntP,hBitmap, UInt,0 ) SendMessage, (STM_SETIMAGE:=0x172), (IMAGE_BITMAP:=0x0), hBitmap,, ahk_id %[color=red]Pic1[/color]% SoundPlay, *16, 1 Gui, Show,, Just for fun DllCall( "gdiplus\GdipDisposeImage", UInt,pBitmap ) DllCall( "gdiplus\GdiplusShutdown", UInt,pToken ) DllCall( NumGet(NumGet(1*pStream)+8 ), UInt,pStream ) Return ; // End of Auto-Execute section LoadPictureToBuffer: ; creates Binary buffer with PNG image sized 164x65 ( 1725 bytes ) hex= ( Join 89504E470D0A1A0A0000000D49484452000000A4000000410802000000D05E9827000000157445587443726561 74696F6E2054696D650007D7090B091823E35252930000000774494D4507D7090B09182DD1EB9CE40000000970 48597300000B1200000B1201D2DD7EFC0000063B4944415478DAED9D0B50545518C7BFBB2C2F812520F14113A4 24192596823AE6848F91668C49CB49C707630F75540688D4CC34451A340B4531CB6C02A9C446344149284218C7 19904732C2E02B096B5494485C511ECB6E6739CDE5B27BB97BF7EEB277D9737EC39CFDEEB9E79CFDCEFD9FF39D 73D9BDC0D45E28030A01C4266C50A297D0B049727B42195892929250AAC4077535E572FB43197094AC15313F0B 18600C31CEE1CB54882BC6DB9A95EB8A6A4DDF538598377584CE86B95DC6122BE41E6D14DB41C526082A3641D8 42EC4B459BEA7FFD48EE9E52381B3416F5A574831CBF7189CD35A9DC9C11133FC0C6DFE5296C66D04B9B1BCE6E E3161B33631B58C0B923B1DCC3C8A55FC97DB9063786623FB8BC0FA5AAB171065B3B7CD6FF8575C86EAADE79AB F2D391E11B50CE13933662BD03A76E628B8D7E792BB2AF956CB952FC71C8CC640B5D9CB6683FEB89DC976B7023 258C0F9FB01EA5372B76985BB1AE70636DC187D8AEC95F7FE1D43A6C579D78BFF2A7C48AE3EF9D3F9620DCC299 AC95C5875620A328E35D94FEF2CD3B8507DF46C6E903CB708153FB634E7EB1346FDF92DCF4C538E778DAC263BB 1722E368EA9B36BFBCF685D2F2262CA43A772D4A27CEDBD57B9FD897B3875763830DE3BF652EE71628F8FA2D6C E47F1983D2E835DFA14690DE27F62E9A179F8D4FE5EC5A207747E54748EC7B7569D8406BB6598DFE51BA151B68 CD16197BD1CC4669C41B69C6A78CC3F8CC6507B9C3E2951519BCA384CBFCC41F4D96717884C2F863A109A2DBE9 035AB38323939E9E9E24A6F08BAF7DCEDA26C338C512A4ACD9B7AB76A2146FD0ACC284B9A9288CCB7D291C1FC3 30EE19128B36E4F7EBF7F296BEF3FB67D840B75E3824B2B75E8DE73E41B75EC26F161A9582F668174FF7192578 CDC6A0302E66CDEE8F39ABB2D0B28D3668F8706EDC61C2E3B6014CED85B2D0B0497535E5F4831047ED6C98DBE5 9C1305252525F4D7A50441C526082A364150B109A277377E3E27466E671C0F5DCF8FBD4067364150B109828A4D 10546C82A0621304159B20A8D80441C526082A364150B10942BAD8639F9F1D382A5E6EFF296620516CBFA129D0 DDE6E955BE3979BBDC5DA08845A2D85A4D9EC27928C053C7737277EEAE90BB17145148F9DEB8AF779A872B7A6D D5576F83BB4DA500E1266B3D377E32F7D0923FEF819A92501DD7925097D7738376B887DCF2C6EF25CD79AB20E9 2181AE23AA2015C3A8019A753ABF9F4FE6AC899FBD7AC53893F5ECE1EFB748F38157575ED9040681EC981DC67D 3C0E0C7141AFDD68E10698AA6FA115EAEBCEC8DD113BC57E94062933FB518677800AE03E40F04805AA7E17BC86 169FCCDEB83D6AF18267CC6D0C473C1C5D811321B9578A7B8AB73AF7AC400E7BC80673839685C3AF31D216055E E7FBF344C037E33226314F6C954BB69BFE9B173AD0A254FD6C5820B4A035DC1D9AA0B0B0C4A4D8BCFEB1B6716C 64EDFE94162869BC42F3AA2EA624983F0E448A61D065F1BDE0EDBB49CC135BF1608F77801BB4A851BD85B334AF 47974107C0ED9B3A17B7AADCCC1D59D3A3E7840854B7414C33D6C92ACEF4575860721BCC3FABF74242CB6688AD 52E6BB758393A73BB4B4A3253B6E65CB98C087D005A0D130A382E0FAB5EFB34B85C51E688467E700C106611BF7 42C2CC316383E6A24EF6F5F584E67BA04102C394290FFC02B47AB1117FDD00578FDADC6F0B8B1AACD8EDC18E6D 069CF877113BB3BD204FA903C6DD19FE452F00DEC0F8FB848CF0BE54F6273C0268EF849040A8BF9A79A8286AD6 F2FE1A11B3F271278AF0E0352E693CC9C44F3B4B26A88127BCB6B4D6C4E4889FE2BDCF7A0997F3F967F2B0C75D 9D9C3B7AB666009EC004F93DE9B1A4F1C61EB8D5F37D5957E76E0DF3B0B533B3FC871991A3A55D353BC1AE6E8E ADE21B7ED64BECCCEE68873675A7D289C1817F48B72E79956AFCB8EACEEBA0D1EA9F9464DABABA34A0F286B55B 2AAB4B079FD812F6DB83CE37B1623BB9875F69AC5230DAFF6736C0ABD31A74BA86DAAB005A9D7E0468C1DD05D2 B22386F9B4CB7D71A4606F020F846F62C556FBA6B76A1E5EACBBE3D4F3BC6B2F288033BDA94FB026EF6890DC17 87C28F19B75EC3FD870CF70F92DB618A74E8375508828A4D10546C82A0621304159B20A8D80441C526082A3641 50B109828A4D10546C82A0621304159B20A8D804A1FF8813FF0B568AC3C3444646CAED03C546FC0772437DB7F8 BEC2BC0000000049454E44AE426082 ) ; Laszlo's MCode() ; http://www.autohotkey.com/forum/viewtopic.php?p=135302#135302 nSize := StrLen(Hex)//2 VarSetCapacity( Buffer,nSize ) Loop % nSize NumPut( "0x" . SubStr(hex,2*A_Index-1,2), Buffer, A_Index-1, "Char" ) Return GuiEscape: ExitApp