Fa در مورد AutoIt

Corovarice

Active Member
سلام دوستان. ببخشید من انجمن AutoIt رو نتونستم پیدا کنم مجبور شدم اینجا مطرح کنم.
ما توی MMB وقتی رو منوی Project کلیک می کنیم یه قسمت هست به نام Embedded files که می تونیم فایلی رو به راحتی embed کنیم که همتون هم این رو می دونین و بلدین. ما فایل های embed شده رو هم با <Embedded > فرا خوانی می کنیم.
حالا سوالم اینه که میشه توی نرم افزار AutoIt یه فایلی رو embed کرد ؟ اگه میشه باید با چه اسکریپتی فایل رو فراخوانی کنیم ؟
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
بله، با استفاده از کد زیر میتونید فایل ها رو به برنامه اضافه کنید:
کد:
#AutoIt3Wrapper_Res_File_Add=
بعنوان مثال:
کد:
#AutoIt3Wrapper_Res_File_Add = C:\WINDOWS\Media\tada.wav,  SOUND, MYWAV
که فرمت پارامتر ورودی به این شکل هست:
کد:
Filename[,Section [,ResName[,LanguageCode]]] to be added.

برای توضیحات تکمیلی، در راهنما به مسیر زیر مراجعه کنید:
کد:
AutoIt3 HelpFile -> Extra Utilities > AutoIt3Wrapper > Adding icons to the program resource

همچنین اگه هنگام کامپایل گزینه ی Compile with Options رو انتخاب کنبد، در پنجره ی باز شده، در تب ResAdd Files میتونید فایلها رو به برنامه اضافه کنید
 

Corovarice

Active Member
کد:
#AutoIt3Wrapper_Res_File_Add = C:\WINDOWS\Media\tada.wav,  SOUND, MYWAV

خیلی ببخشید. من زیاد وارد نیستم. از Sound,Mywav سر در نیاوردم. من می خوام یه فایل exe رو embed کنم. اون وقت به جای SOUND,MYWAV چی بنویسم ؟
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
به فایل پیوستی دقت کنید (Resource.rar)

فایل resources.au3 یک UDF هست که برای کار با ریسورس ها نوشته شده، خود UDF بهمراه نمونه ها هم پیوست شده، این هم لینک تاپیک مربوط به این UDF هست: اینجا

برای تست این مثال، یک فایل بنام File1.exe تو همون فولدر قرار بدید و مثال رو کامپایل کنید.

کد:
#AutoIt3Wrapper_Res_File_Add = File1.exe, rt_rcdata, MyEXE_1
این دایرکتیو برای اضافه کردن فایل بکار برده میشه
قبل از هرچیز باید عرض کنم که برای اجرای این مثال حتماً باید AutoIt3, Scite4 و AutoIt3Wrapper ورژن 2.0.1.22 به بالا داشته باشید که همه از سایت AutoIt قابل دانلود هستن.

خب قسمت اول این دایرکتیو که مسیر و نام فایل هست، پارامتر دوم نوع فایل هست که برای فایلهای اجرایی از rt_rcdata استفاده کنید، و قسمت سوم هم نام منحصربفردی هست که به فایل اختصاص میدید که از طریق این نام، فایل در دسترس خواهد بود.
 

پیوست ها

  • Resources.rar
    3.2 کیلوبایت · بازدیدها: 10
  • resource_data.zip
    18.3 کیلوبایت · بازدیدها: 11
  • resource_au3.zip
    6.8 کیلوبایت · بازدیدها: 15

Corovarice

Active Member
یه دونه فایل embed کردن تو autoit چقدر پیچیدست !!
می دونم دارم مزاحم میشم خیلی عذر می خوام... کارایی رو که گفتیم کردم ولی وقتی رو دکمه ی Run EXE کلیک می کنم فایل باز نمیشه!! من فقط می خوام اینطوری بشه که یه فایل EXE ای که در همون فولدر هست و اسمش هم مثلا File1.exe هست embed بشه و همین که فایل compile شده ی autoit رو باز کردیم هیچ صفحه ای ظاهر نشه و فقط فایل باز بشه. من دیروز AutoIt رو نصب کردم. وقتی مثالتون رو دیدم سرم گیج رفت.:shock:
مثال ساده ای می تونین پیوست کنین؟ :-?خیلی ببخشید
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
این کدی هست که نوشتم:
کد:
#AutoIt3Wrapper_Res_File_Add = File1.exe, rt_rcdata, MyEXE_1 ; Add files to compiled app
   
  #include "resources.au3"
   
  #include <ButtonConstants.au3>
  #include <GUIConstant***.au3>
  #include <WindowsConstants.au3>
   
  #Region ### START Koda GUI section ### Form=
  $Form1 = GUICreate("Form1", 267, 185, 192, 124)
  $Button1 = GUICtrlCreateButton("Run EXE", 72, 32, 75, 25, $WS_GROUP)
  GUISetState(@SW_SHOW)
  #EndRegion ### END Koda GUI section ###
   
  Global $EXE1 = @ScriptDir & "\ExtractedFile.exe"
   
  While 1
     $nMsg = GUIGetMsg()
     Switch $nMsg
         Case $GUI_EVENT_CLOSE
             Exit
   
         case $Button1
             _Extract()
  Run($EXE1)
     EndSwitch
  WEnd
   
  Func _Extract()
     _ResourceSaveToFile($EXE1, "MyEXE_1", $RT_RCDATA, 0, 1) ; save file to disk
  EndFunc
خط اول همونطور که توضیح دادم فایل رو به برنامه اضافه میکنه (تا اینجاش که هیچ چیز عجیب و غریبی نداشته :دی )
خط بعد یک فایل (سرآمد) رو به برنامه اضافه میکنه که حاوی یک سری توابع هست که کار با Resource ها رو برای ما آسون میکنه (اینم یه بخش ثابته، تا اینجا کد خاصی ننوشتیم، فقط دوتا دستور مشخص !)

خطوطی که مشخص کردم هم جهت ساخت ظاهر گرافیکی یا همون GUI بکار میرن که اینم من ننوشتم، یک برنامه ی فرم ساز خودش تولید کرده:
کد:
#include <ButtonConstants.au3>
#include <GUIConstant***.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 267, 185, 192, 124)
$Button1 = GUICtrlCreateButton("Run EXE", 72, 32, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
بعد از این، تو خط بعدیش یه متغیر تعریف شده که محل ذخیره و درواقع استخراج شدن فایل embed شده رو مشخص میکنه (ScriptDir@ معادل <SrcDir> در MMB هست)

خط بعد هم یک حلقه ی While هست که کنترل رویدادها رو بعهده داره، اینجا دو رویداد تعریف شده، یکی فشردن دکمه ی Close و دیگری کلیک روی دکمه ی موجود در برنامه

در رویداد مربوط به دکمه، اول یک تابع بنام ()Extract_ صدا زده میشه و بعد دستور اجرای فایل (فایل استخراج شده) صادر میشه

بعد از حلقه هم تعریف تابع صورت گرفته، که درونش از یکی از توابع موجود در فایل سرآمد resources (که همون بالا با کد "include "resources.au3 مشخص کردیم که کیخایم به توابعش دسترسی داشته باشیم) صدا زده میشه که فایل Embed شده رو روی دیسک ذخیره میکنه، پارامتر اول محل ذخیره ی فایل هست، و پارامتر دوم هم اسم فایل Resource که هنگام Embed کردنش بهش اختصاص دادیم. (بقیه ی پارامترها هم نیاز به تغییر نداره)

تمام !

حالا با توجه به توضیحاتتون، خلاصه شدش کد زیر هست:
کد:
#AutoIt3Wrapper_Res_File_Add = File1.exe, rt_rcdata, MyEXE_1 ; Add files to compiled app
#include "resources.au3"

Global $EXE1 = @ScriptDir & "\ExtractedFile.exe"

_ResourceSaveToFile($EXE1, "MyEXE_1", $RT_RCDATA, 0, 1) ; save file to disk
Run($EXE1)

در مورد اجرا نشدنش هم باید عرض کنم که خودم چندین دفعه تستش کردم و مشکلی نداشت، توجه کنید که سه فایل FileAsResource.au3, resources.au3 و File1.exe باید کنار هم باشن تا برنامه بتونه کامپایل بشه، علاوه بر این اون ملزوماتی که گفتم هم باید نصب باشه (AutoIt3, Scite4 و AutoIt3Wrapper ورژن 2.0.1.22 به بالا)

سوالی بود در خدمتم
 

جدیدترین ارسال ها

بالا