Jump to content
Sign in to follow this  

Embed icon in compiled EXE

Recommended Posts


I've seen a few posts about embedding EXE and BMP files into AutoIT scripts but I want to embed the icon file I am using for command buttons into the EXE so that I do not need to have the ICO files on the machine.

My script, once compiled, will contain everything it needs so if I move it to a different folder where the ICO files aren't located, they still show up in my GUI screen.

Any suggestions/help?

Share this post

Link to post
Share on other sites

Take a look http://www.autoitscript.com/forum/index.ph...%20hex&st=0


Glad you liked it, i convert the picture data to binary code using a hex editor and than i call this line

CODEFileWrite(@TempDir & "\chip.jpg", Binary($pic))

to create the picture. Take a look in the beginning of the script at local $pic. I'm declaring the binary code there, it may look a little complicated but it's simillair to FileInstall. Check the help file for more info.

as for the first problem i have spended only 10 minutes to convert and create the script since i'm not a Dll guru so errors might occur.

Convert picture:

$file = FileOpenDialog('Open the image file', @ScriptDir, 'image (*.jpg;*.bmp;*gif;*.png)', 1)
$file2 = FileSaveDialog('Save the file', @ScriptDir, 'script (*.au3)')
_CheckExt($file2, 'au3')
$var = InputBox('Name variable', 'Prompt the name variable used', '$pic')
_CheckCapital($var, '$')
$hfile = FileOpen($file, 16)
$hfile2 = FileOpen($file2, 2)
FileWrite($hfile2, $var&'="0x"' & @CRLF)
While 1
    $data = FileRead($hfile, 30)
    If @error Then ExitLoop
    FileWrite($hfile2, $var&'&="' & StringTrimLeft($data,2) & '"' & @CRLF)
MsgBox(0, 'Done!!', 'Done by Fabry!!!')
Func _CheckExt(ByRef $s_file, $s_ext)
    If StringRight($s_file, StringLen($s_ext)) <> $s_ext Then $s_file &= '.' & $s_ext
EndFunc   ;==>_CheckExt
Func _CheckCapital(ByRef $s_file, $s_cap)
    If StringLeft($s_file, StringLen($s_cap)) <> $s_cap Then $s_file = $s_cap & $s_file
EndFunc   ;==>_CheckExt

Share this post

Link to post
Share on other sites

I don't want to create a picture, I simply want to embed the icon within my compiled exe.

Currently, I'm just using

$play = GUICtrlCreateButton( "Play", 1, 1, 48, 48, $BS_BITMAP)

GUICtrlSetImage($play, "play.bmp", 0)

but if "play.bmp" doesn't exist, the icon on the button is empty. I want to be able to reference that image no matter where I am, and I do not want to have extra files that are associated with the application. I can have only the EXE and nothing else.

Share this post

Link to post
Share on other sites

Doens't FileInstall meet your needs? I see you don't want any other files, but you can remove it afterwards anyways.

Share this post

Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this