NDTC Posted June 13, 2008 Share Posted June 13, 2008 Hi All, I'm newbe in AutoIT... I use this line in my script to display an picture in my GUI. CODE$MainForm = GUICreate("My Form", 584, 212) ... $Pic1 = GUICtrlCreatePic("C:\Sources\My Project\MyPicture.bmp", 432, 3, 147, 66) ... But when exporting the compiled executable, the picture was not included, it does not appear ... Could someone help me to integrate this picture in the executable? Thank you in advance. NDTC. Link to comment Share on other sites More sharing options...
nobbe Posted June 13, 2008 Share Posted June 13, 2008 you need "reshacker.exe" and then you can embed it expandcollapse popup#Region AutoIt3Wrapper directives section #AutoIt3Wrapper_UseUpx=n ;; add icon #AutoIt3Wrapper_Icon=earth.ico #AutoIt3Wrapper_Run_After=c:\ResHacker.exe -add resource_test.exe, resource_test.exe, image1.bmp , 2, TEST_BMP_1, 0 #AutoIt3Wrapper_Run_After=c:\ResHacker.exe -add resource_test.exe, resource_test.exe, image2.bmp , 2, TEST_BMP_2, 0 #AutoIt3Wrapper_run_after=c:\ResHacker.exe -add %out%, %out%, test_1.gif, 23, TEST_GIF_1, 0 #AutoIt3Wrapper_Run_After=c:\upx.exe --compress-resources=0 resource_test.exe #EndRegion #include "resources.au3" $gui = GUICreate("Data from resources example",820,400) $pic1 = GUICtrlCreatePic("",0,0,400,300) $pic2 = GUICtrlCreatePic("",400,0,400,300) $label = GUICtrlCreateLabel("test",20,320,800,100) GUISetState(@SW_SHOW) ; get string from resource ;$string = _ResourceGetAsString("TEST_TXT_1") ;GUICtrlSetData($label, $string) ; set image to picture control from resource bitmap _ResourceSetImageToCtrl($pic1, "TEST_BMP_1", $RT_BITMAP) ; set image to picture control from resource bitmap _ResourceSetImageToCtrl($pic2, "TEST_GIF_1", $RT_BITMAP) While 1 If GUIGetMsg() = -3 Then Exit WEndoÝ÷ Ù©Ýë(º·±«·jëh×6#include-once Global Const $RT_CURSOR = 1 Global Const $RT_BITMAP = 2 Global Const $RT_ICON = 3 Global Const $RT_MENU = 4 Global Const $RT_DIALOG = 5 Global Const $RT_STRING = 6 Global Const $RT_FONTDIR = 7 Global Const $RT_FONT = 8 Global Const $RT_ACCELERATORS = 9 Global Const $RT_RCDATA = 10 Global Const $RT_MESSAGETABLE = 11 Global Const $RT_GROUP_CURSOR = 12 Global Const $RT_GROUP_ICON = 14 Global Const $RT_VERSION = 16 Global Const $RT_ANICURSOR = 21 Global Const $RT_ANIICON = 22 Global Const $RT_HTML = 23 Global Const $RT_MANIFEST = 24 Global Const $SND_RESOURCE = 0x00040004 Global Const $SND_SYNC = 0x0 Global Const $SND_ASYNC = 0x1 Global Const $SND_LOOP = 0x8 Global Const $SND_NOSTOP = 0x10 Global Const $SND_NOWAIT = 0x2000 Global Const $SND_PURGE = 0x40 Func _ResourceGet($ResName, $ResType = 10, $ResLang = 0) ; $RT_RCDATA = 10 Local Const $IMAGE_BITMAP = 0 Local $hInstance, $hBitmap, $InfoBlock, $GlobalMemoryBlock, $MemoryPointer, $ResSize $hInstance = DllCall("kernel32.dll", "int", "GetModuleHandleA", "int", 0) $hInstance = $hInstance[0] If $ResType = $RT_BITMAP Then $hBitmap = DllCall("user32.dll", "hwnd", "LoadImage", "hwnd", $hInstance, "str", $ResName, _ "int", $IMAGE_BITMAP, "int", 0, "int", 0, "int", 0) If @error Then Return SetError(1, 0, 0) $hBitmap = $hBitmap[0] Return $hBitmap ; returns handle to Bitmap EndIf If $ResLang <> 0 Then $InfoBlock = DllCall("kernel32.dll", "int", "FindResourceExA", "int", $hInstance, "str", $ResName, "long", $ResType, "short", $ResLang) Else $InfoBlock = DllCall("kernel32.dll", "int", "FindResourceA", "int", $hInstance, "str", $ResName, "long", $ResType) EndIf If @error Then Return SetError(2, 0, 0) $InfoBlock = $InfoBlock[0] If $InfoBlock = 0 Then Return SetError(3, 0, 0) $ResSize = DllCall("kernel32.dll", "dword", "SizeofResource", "int", $hInstance, "int", $InfoBlock) If @error Then Return SetError(4, 0, 0) $ResSize = $ResSize[0] If $ResSize = 0 Then Return SetError(5, 0, 0) $GlobalMemoryBlock = DllCall("kernel32.dll", "int", "LoadResource", "int", $hInstance, "int", $InfoBlock) If @error Then Return SetError(6, 0, 0) $GlobalMemoryBlock = $GlobalMemoryBlock[0] If $GlobalMemoryBlock = 0 Then Return SetError(7, 0, 0) $MemoryPointer = DllCall("kernel32.dll", "int", "LockResource", "int", $GlobalMemoryBlock) If @error Then Return SetError(8, 0, 0) $MemoryPointer = $MemoryPointer[0] If $MemoryPointer = 0 Then Return SetError(9, 0, 0) SetExtended($ResSize) Return $MemoryPointer EndFunc Func _ResourceGetAsString($ResName, $ResType = 10, $ResLang = 0) ; $RT_RCDATA = 10 Local $ResPointer, $ResSize, $struct $ResPointer = _ResourceGet($ResName, $ResType, $ResLang) If @error Then SetError(1, 0, 0) Return '' EndIf $ResSize = @extended $struct = DllStructCreate("char[" & $ResSize & "]", $ResPointer) Return DllStructGetData($struct, 1) ; returns string EndFunc Func _ResourceGetAsBytes($ResName, $ResType = 10, $ResLang = 0) ; $RT_RCDATA = 10 Local $ResPointer, $ResSize $ResPointer = _ResourceGet($ResName, $ResType, $ResLang) If @error Then Return SetError(1, 0, 0) $ResSize = @extended Return DllStructCreate("byte[" & $ResSize & "]", $ResPointer) ; returns struct with bytes EndFunc Func _ResourceSaveToFile($FileName, $ResName, $ResType = 10, $ResLang = 0, $CreatePath = 0) ; $RT_RCDATA = 10 Local $ResStruct, $ResSize, $FileHandle $ResStruct = _ResourceGetAsBytes($ResName, $ResType, $ResLang) If @error Then Return SetError(1, 0, 0) $ResSize = DllStructGetSize($ResStruct) If $CreatePath Then $CreatePath = 8 ; mode 8 = Create directory structure if it doesn't exist $FileHandle = FileOpen($FileName, 2+16+$CreatePath) If @error Then Return SetError(2, 0, 0) FileWrite($FileHandle, DllStructGetData($ResStruct, 1)) If @error Then Return SetError(3, 0, 0) FileClose($FileHandle) If @error Then Return SetError(4, 0, 0) Return $ResSize EndFunc Func _ResourceSetImageToCtrl($CtrlId, $ResName, $ResType = 10) ; $RT_RCDATA = 10 Local $ResData = _ResourceGet($ResName, $ResType) If @error Then Return SetError(1, 0, 0) If $ResType = $RT_BITMAP Then _SetBitmapToCtrl($CtrlId, $ResData) If @error Then Return SetError(2, 0, 0) Return 1 EndIf ; for other types then BITMAP not implemented yet (must be used GDI+) ... ; ... Return SetError(-1, 0, 0) EndFunc ; internal helper function Func _SetBitmapToCtrl($CtrlId, $hBitmap) Local Const $STM_SETIMAGE = 0x0172 Local Const $IMAGE_BITMAP = 0 Local $hWnd = GUICtrlGetHandle($CtrlId) If $hWnd = 0 Then Return SetError(1, 0, 0) DllCall("user32.dll", "hwnd", "SendMessage", "hwnd", $hWnd, "int", $STM_SETIMAGE, "int", $IMAGE_BITMAP, "int", $hBitmap) If @error Then Return SetError(2, 0, 0) Return 1 EndFunc ; thanks Larry ; MSDN: http://msdn2.microsoft.com/en-us/library/ms712879.aspx ; default flag is $SND_SYNC = 0 Func _ResourcePlaySound($ResName, $Flag = 0) Local $ret = DllCall("winmm.dll", "int", "PlaySound", "str", $ResName, "hwnd", 0, "int", BitOr($SND_RESOURCE,$Flag)) If @error Then Return SetError(1, 0, 0) Return $ret[0] EndFunc Link to comment Share on other sites More sharing options...
NDTC Posted June 13, 2008 Author Share Posted June 13, 2008 It's work find... But the compression is disable... The size of my EXE file from 300k to 650k while my picture is 30k! Thank you... Link to comment Share on other sites More sharing options...
nobbe Posted June 13, 2008 Share Posted June 13, 2008 use this AFTER the embedding #AutoIt3Wrapper_Run_After=c:\upx.exe --compress-resources=0 resource_test.exe c:\upx.exe -> path to upx.. Link to comment Share on other sites More sharing options...
nobbe Posted June 13, 2008 Share Posted June 13, 2008 if recources are compressed i think i wont work anymore Link to comment Share on other sites More sharing options...
ReaImDown Posted June 13, 2008 Share Posted June 13, 2008 if recources are compressed i think i wont work anymorecant you just use fileinstall()? [u][font="Century Gothic"]~я α и d γ ĵ . ċ . ѕ қ ϊ и и ε я~- My Programs -auto shutdownSleep funcdisallow programs[/font][/u] Link to comment Share on other sites More sharing options...
d4rk Posted June 13, 2008 Share Posted June 13, 2008 That's cool RuaImDown, i'm going to post that since reading the first post [quote]Don't expect for a perfect life ... Expect a least troubles ones[/quote]Contact me : ass@kiss.toWhat I Have Done :Favorites Manager Mangage your favorite's folder, that's coolPC Waker For those who want to save stickersWebScipts Supporter For those who've just started with Web and WebScriptsTemporary Looker Simple but powerful to manage your Temporary folder, you know what you downloaded[UDF] _NumberFormat() Better performance on number display[UDF] _DirGet() What a folder contain [how many (hidden,normal,...) files], with one line of code[UDF] _IsPressEs() Just like _IsPress() but for a group of keys Link to comment Share on other sites More sharing options...
NDTC Posted June 14, 2008 Author Share Posted June 14, 2008 Thank's Nobbe,The compression work fine and is better with #AutoIt3Wrapper_Run_After=c:\upx.exe --compress-resources=1 resource_test.exeI don't know the cmd line parameter existing for upx.exe, but i reduce my exe to 55% insted 30%ReaImDown,I don't want to use fileinstall(), because i don't want that the logo stay on the computer.Thank's to all.Thomas. Link to comment Share on other sites More sharing options...
nobbe Posted June 14, 2008 Share Posted June 14, 2008 you are right , resources can be compressed im using now a more variable construction with "%out%" #Region AutoIt3Wrapper directives section #AutoIt3Wrapper_UseUpx=n ;; add icon #AutoIt3Wrapper_Icon=earth.ico #AutoIt3Wrapper_Run_After=c:\ResHacker.exe -add %out%, %out%, image1.bmp , 2, TEST_BMP_1, 0 #AutoIt3Wrapper_Run_After=c:\ResHacker.exe -add %out%, %out%, image2.bmp , 2, TEST_BMP_2, 0 #AutoIt3Wrapper_Run_After=c:\ResHacker.exe -add %out%, %out%, test_1.gif, 23, TEST_GIF_1, 0 #AutoIt3Wrapper_Run_After=c:\upx.exe --compress-resources=1 "%out%" #EndRegion Link to comment Share on other sites More sharing options...
Zedna Posted June 15, 2008 Share Posted June 15, 2008 Look at my original topic here:http://www.autoitscript.com/forum/index.php?showtopic=51103 Resources UDF ResourcesEx UDF AutoIt Forum Search Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now