Jump to content

This site uses cookies. By continuing to browse the site you are agreeing to our use of cookies. Find out more here. X
X


Photo

Resources UDF


  • Please log in to reply
625 replies to this topic

#41 SmOke_N

SmOke_N

    It's not what you know ... It's what you can prove!

  • Moderators
  • 15,730 posts

Posted 26 August 2007 - 11:11 PM

Doh!! This is brilliant Zedna!

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.








#42 Jos

Jos

    ...

  • Developers
  • 22,990 posts

Posted 27 August 2007 - 01:52 PM

On what CPU clock? :)  
OK. no problem.
Make only adding source files as resources then
and if in the future will be need for RES files adding then it could be added.

I tested it on a WinXP SP2 with a Pentium duo core 1.9Ghz processor.
I have no issues adding thing but they have to serve a purpose for the larger community. I really like the way you have figured this out and thinkits something people will use but I do want to avoid an overkill on Directives and confuse the hell out of people when telling them to use Rc.exe to create their own RES file.
The folks like you that understand the whole proces can use the Run_After directives to perform those steps in the few occasion were it is useful.

One more note:
In Delphi there are resources added only as RES precompiled ones $R directive as: {$R filename.res}
and I think in another languages this will be the same
- so this will be also for more "compatibility" with other languages

The fact is that this are AutoIt3Wrapper Directives and not AutoIt3, so it doesn't make sense to call it something else. Apart from that, the support in SciTE and AutoIt3 Lexers simply isn't there...

;)

Visit the SciTE4AutoIt3 Download page for the latest versions                                                                 Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)


#43 Zedna

Zedna

    AutoIt rulez!

  • MVPs
  • 8,674 posts

Posted 27 August 2007 - 02:10 PM

I have no issues adding thing but they have to serve a purpose for the larger community. I really like the way you have figured this out and thinkits something people will use but I do want to avoid an overkill on Directives and confuse the hell out of people when telling them to use Rc.exe to create their own RES file.
The folks like you that understand the whole proces can use the Run_After directives to perform those steps in the few occasion were it is useful.

:)


I think about AutoIt as general purpose programming language therefore I suggested more general solution/directives for adding also precompiled RES files but you think about AutoIt as scripting language (for beginner scripters) only.
That's different point of view ;)

OK.
I agree.
To add RES files can be used  Run_After as you said and for AutoIt mainstream users will be your new #AutoIt3Wrapper directives good/sufficient.

#44 Zedna

Zedna

    AutoIt rulez!

  • MVPs
  • 8,674 posts

Posted 29 August 2007 - 04:53 PM

I updated first post in this topic with all latest examples and UDF versions.
From now I will keep updated first post with the most recent changes.

TODO list:
- support for resource types also as strings (now only numbers: $RT_BITMAP, $RT_RCDATA, ...)
- add support for JPG,GIF,PNG to _ResourceSetImageToCtrl() (now only BMP)
- make example for using _ResourceGetAsBytes()

Edited by Zedna, 29 August 2007 - 05:00 PM.


#45 Zedna

Zedna

    AutoIt rulez!

  • MVPs
  • 8,674 posts

Posted 04 September 2007 - 08:18 PM

Updated first post:

2007-09-04
- added description at top of this topic
- added _ResourceSaveToFile() - source is also example for using _ResourceGetAsBytes()
- more error checking in UDF and error codes are now differrent to distinguish possible problem
- default ResType = 10 ($RT_RCDATA) in all functions
- updated ZIP archives (previous downloads: 8+7)

#46 Zedna

Zedna

    AutoIt rulez!

  • MVPs
  • 8,674 posts

Posted 05 September 2007 - 09:48 PM

Updated first post:

2007-09-05
- in #AutoIt3Wrapper_run_after=ResHacker.exe -add ... directive can be resource type in text form
--> rcdata instead of 10, bitmap instead of 2 and so on (note: but for html must be used 23 still)
- updated only resource_test.au3 in resource_au3.zip

#47 smashly

smashly

  • Active Members
  • PipPipPipPipPipPip
  • 1,636 posts

Posted 10 September 2007 - 03:10 PM

Thank you zedna,
I tried your udf on a project I was working on for someone else and it works great.
The only thing I supplemented was I used compression as -9 as opposed to using the no compression of resources.
Since I was only using bmp as resources all works great. 0 compress on resources was around 200KB smaller on a 1.5MB exe,
-9 on resource was around 1.3MB smaller on the same 1.5mb exe
Thought there might be some sort of trade off or failure, but I really couldn't notice it if there was performance trade off , and definately no failure.... All good.

Once again thank you for your efforts.

Cheers.

#48 Zedna

Zedna

    AutoIt rulez!

  • MVPs
  • 8,674 posts

Posted 10 September 2007 - 08:08 PM

Thank you zedna,
I tried your udf on a project I was working on for someone else and it works great.
The only thing I supplemented was I used compression as -9 as opposed to using the no compression of resources.
Since I was only using bmp as resources all works great. 0 compress on resources was around 200KB smaller on a 1.5MB exe,
-9 on resource was around 1.3MB smaller on the same 1.5mb exe
Thought there might be some sort of trade off or failure, but I really couldn't notice it if there was performance trade off , and definately no failure.... All good.

Once again thank you for your efforts.

Cheers.



Thanks for positive feedback :)
I'm glad it works fine for you and others.
I will update my examples to use new AutoIt3Wrapper "res_file_add" directive in next few days so stay tuned ...
About compression, thanks for your informations, this was already disccused in this topic and I'm not so experienced with this if there are some possible problems, so I can't help much in this area.
Also in future when will be added JPG/GIF/PNG support with Auto3Lib and its GDI+ will be resources compression minor problem.

#49 Zedna

Zedna

    AutoIt rulez!

  • MVPs
  • 8,674 posts

Posted 11 September 2007 - 10:20 PM

Updated first post:

2007-09-11
- in examples used new AutoIt3Wrapper directive #AutoIt3Wrapper_Res_File_Add from latest Scite4AutoIt3
(instead of #AutoIt3Wrapper_run_after=ResHacker.exe -add ...)
- updated resource_test.au3 and resource_test_ie.au3 in resource_au3.zip

instead of previous:
#AutoIt3Wrapper_useupx=n  #AutoIt3Wrapper_run_after=ResHacker.exe -add %out%, %out%, test_1.txt, rcdata, TEST_TXT_1, 0  #AutoIt3Wrapper_run_after=ResHacker.exe -add %out%, %out%, image1.bmp, bitmap, TEST_BMP_1, 0  #AutoIt3Wrapper_run_after=ResHacker.exe -add %out%, %out%, image2.bmp, bitmap, TEST_BMP_2, 0  #AutoIt3Wrapper_run_after=ResHacker.exe -add %out%, %out%, binary1.dat, rcdata, TEST_BIN_1, 0  #AutoIt3Wrapper_run_after=upx.exe --compress-resources=0 "%out%"


is now used:
#AutoIt3Wrapper_Res_File_Add=test_1.txt, rcdata, TEST_TXT_1  #AutoIt3Wrapper_Res_File_Add=image1.bmp, bitmap, TEST_BMP_1  #AutoIt3Wrapper_Res_File_Add=image2.bmp, bitmap, TEST_BMP_2  #AutoIt3Wrapper_Res_File_Add=binary1.dat, rcdata, TEST_BIN_1

Edited by Zedna, 11 September 2007 - 10:20 PM.


#50 RazerM

RazerM

    cowinkeedenky - coincidence?

  • Active Members
  • PipPipPipPipPipPip
  • 1,246 posts

Posted 12 September 2007 - 09:22 PM

This is very good, it's so easy to use now :)
My Programs:AInstall - Create a standalone installer for your programUnit Converter - Converts Length, Area, Volume, Weight, Temperature and Pressure to different unitsBinary Clock - Hours, minutes and seconds have 10 columns each to display timeAutoIt Editor - Code Editor with Syntax Highlighting.Laserix Editor & Player - Create, Edit and Play Laserix LevelsLyric Syncer - Create and use Synchronised Lyrics.Connect 4 - 2 Player Connect 4 Game (Local or Online!, Formatted Chat!!)MD5, SHA-1, SHA-256, Tiger and Whirlpool Hash Finder - Dictionary and Brute Force FindCool Text Client - Create Rendered ImageMy UDF's:GUI Enhance - Enhance your GUIs visually.IDEA File Encryption - Encrypt and decrypt files easily! File Rename - Rename files easilyRC4 Text Encryption - Encrypt text using the RC4 AlgorithmPrime Number - Check if a number is primeString Remove - remove lots of strings at onceProgress Bar - made easySound UDF - Play, Pause, Resume, Seek and Stop.

#51 smashly

smashly

  • Active Members
  • PipPipPipPipPipPip
  • 1,636 posts

Posted 14 September 2007 - 04:23 AM

Thank You once again Zedna, nice work with the update :)

Suggestion:
Another optional parameter added to the _ResourceSaveToFile($FileName, $ResName, $ResType = 10, $ResLang = 0, $CreatePath = 0) function ..
If $CreatePath = 1 and save path doesn't exist , then create it..

I'm enjoying this udf as is though ..

Cheers.

Edited by smashly, 14 September 2007 - 04:28 AM.


#52 Zedna

Zedna

    AutoIt rulez!

  • MVPs
  • 8,674 posts

Posted 14 September 2007 - 09:25 AM

Thank You once again Zedna, nice work with the update :)

Suggestion:
Another optional parameter added to the _ResourceSaveToFile($FileName, $ResName, $ResType = 10, $ResLang = 0, $CreatePath = 0) function ..
If $CreatePath = 1 and save path doesn't exist , then create it..

I'm enjoying this udf as is though ..

Cheers.


Sorry I don't think one DirCreate() with some "extract dir from full path" logic will be nice in resource UDF.
I will think about this idea more and maybe I will add it.

Thanks for feedback and ideas.

EDIT: I will add it, it's very simple with mode=8 in AutoIt's FileOpen() function

Edited by Zedna, 14 September 2007 - 12:53 PM.


#53 Zedna

Zedna

    AutoIt rulez!

  • MVPs
  • 8,674 posts

Posted 14 September 2007 - 03:19 PM

Thank You once again Zedna, nice work with the update :)

Suggestion:
Another optional parameter added to the _ResourceSaveToFile($FileName, $ResName, $ResType = 10, $ResLang = 0, $CreatePath = 0) function ..
If $CreatePath = 1 and save path doesn't exist , then create it..

I'm enjoying this udf as is though ..

Cheers.


Updated first post

2007-09-14
- added optional parameter $CreatePath in _ResourceSaveToFile()
- updated resource_test.au3 and resource.au3 in resource_au3.zip

#54 shea851

shea851

    Seeker

  • Active Members
  • 39 posts

Posted 14 September 2007 - 08:50 PM

Edit - sorry wrong forum.

Edited by shea851, 14 September 2007 - 08:58 PM.


#55 Zedna

Zedna

    AutoIt rulez!

  • MVPs
  • 8,674 posts

Posted 19 September 2007 - 02:05 PM

When will that be?


This is done already. See first post and read all informations carefully (also notes, history and TODO list).

Also, Zedna, I wish to add a jpg image(still not supported), an mp3 file, a HTML file and a .exe file.

I'm sorry but I don't really know how to work with the script you contributed.

Please help on how to implement it.(Yes, I do know this is not a General Support Forum). We can continues this HERE if you want to.

Thank you. :)


No problem to post/discuss this here.
But first look here
I have no time to play with this now.
So you can get rough concept from my post and finish it yourself if you need quick solution.
Or maybe somebody else can make it quick.

Some notes:
- add any data to compiled EXE is not problem but use some of them directly from resources could be pr

oblem
   for basic types I did my UDF but for mp3 for example I don't know simple solution: maybe use in your COM player address begining with res:// as in my second example I did for HTML resource. This must be tested.
- using HTML from resource is done already in my second example
- EXE/DLL files can't be executed directly from memory/resource as far as I know, so you must save them to disk first

Feel free to post your questions.
I will help you if I can.

Edited by Zedna, 19 September 2007 - 02:07 PM.


#56 TK_Incorperate

TK_Incorperate

    Adventurer

  • Active Members
  • PipPip
  • 147 posts

Posted 26 September 2007 - 11:16 PM

I get this error.

Title: "Invalid Compiler directive"

Error: "Keyword:#AutoIt3Wrapper_Res_File_Add
Value:Set1.bmp, bitmap, TEST_BMP_1"


Edit: Also, when I click OK from that error, I get this one.

"C:\Program Files\AutoIt3\Include\resources.au3(14,30) : ERROR: syntax error
Global Const $RT_VERSION = 16Global
~~~~~~~~~~~~~~~~~~~~^
C:\Program Files\AutoIt3\Include\resources.au3(17,31) : ERROR: syntax error
Global Const $RT_MANIFEST = 24Func
~~~~~~~~~~~~~~~~~~~~~^
C:\TKProgs\D2 Funcs\test others\Trans.au3 - 2 error(s), 0 warning(s)"

Edited by TK_Incorperate, 26 September 2007 - 11:18 PM.


#57 smashly

smashly

  • Active Members
  • PipPipPipPipPipPip
  • 1,636 posts

Posted 27 September 2007 - 01:02 AM

Thank you Zedna for the path option in your _ResourceSaveToFile function, works like a charm :)


I get this error.

Title: "Invalid Compiler directive"

Error: "Keyword:#AutoIt3Wrapper_Res_File_Add
Value:Set1.bmp, bitmap, TEST_BMP_1"
Edit: Also, when I click OK from that error, I get this one.

"C:\Program Files\AutoIt3\Include\resources.au3(14,30) : ERROR: syntax error
Global Const $RT_VERSION = 16Global
~~~~~~~~~~~~~~~~~~~~^
C:\Program Files\AutoIt3\Include\resources.au3(17,31) : ERROR: syntax error
Global Const $RT_MANIFEST = 24Func
~~~~~~~~~~~~~~~~~~~~~^
C:\TKProgs\D2 Funcs\test others\Trans.au3 - 2 error(s), 0 warning(s)"

Are you using Scite 9-Sep-07 to compile
To me your errors look like a case of word wrap...

Cheers

#58 Zedna

Zedna

    AutoIt rulez!

  • MVPs
  • 8,674 posts

Posted 27 September 2007 - 08:45 AM

I get this error.

Title: "Invalid Compiler directive"

Error: "Keyword:#AutoIt3Wrapper_Res_File_Add
Value:Set1.bmp, bitmap, TEST_BMP_1"


As smashly said.

Read carefully my first post:

Notes:
* to compile all script examples you must have installed latest Scite4AutoIt3 (2007-09-09) also with reshacker.exe in AutoIt3Wrapper directory


@smashly: Thanks for your idea for improving my UDF :-)

#59 arcker

arcker

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 581 posts

Posted 04 October 2007 - 12:54 PM

how do you do to use RT_GROUP_ICON ?
i attemp to read this from another Exe but i always get the error 3.
i really don't understand those GROUP_ICON. The ID is retrieve from the registry defaulticon for *.ppt.

AutoIt         
$IconPath = "C:\WINDOWS\Installer\{0000040C-78E1-11D2-B60F-006097C998E7}\pptico.exe" $IconID = 4  _API_LoadLibrary($IconPath) _ResourceGet(1,$RT_GROUP_ICON,0,$IconPath) ConsoleWrite(@error) Func _ResourceGet($ResName, $ResType = 10, $ResLang = 0,$Res_Exe = 0) ; $RT_RCDATA = 10     Local Const $IMAGE_BITMAP = 0     Local $hInstance, $hBitmap, $InfoBlock, $GlobalMemoryBlock, $MemoryPointer, $ResSize         $hInstance = DllCall("kernel32.dll", "int", "GetModuleHandleA", "int", $Res_Exe)     $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

-- Arck System _ Soon -- Ideas make everything

"La critique est facile, l'art est difficile"

 

Projects :

  • Au3Service : Run your exe as service V3 / Updated 29/07/2013 Get it Here

#60 Zedna

Zedna

    AutoIt rulez!

  • MVPs
  • 8,674 posts

Posted 04 October 2007 - 08:40 PM

how do you do to use RT_GROUP_ICON ?
i attemp to read this from another Exe but i always get the error 3.
i really don't understand those GROUP_ICON. The ID is retrieve from the registry defaulticon for *.ppt.


I have so bad ill that I can't stay at computer too long I must lay in my bed and cure myself.
I will look at it later ...

Your code looks good at first look.
Post pptico.exe so I can try something.

Edited by Zedna, 04 October 2007 - 08:40 PM.





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users