امروز یه نفر از من خواست یه قطعه کد توی vc++ براش بنویسم که به کمک اون یه فایل اجرایی رو که توی resource های برنامه اضافه کرده در زمان اجرا استخراج کنه و روی هارد ذخیره کنه. دیدم در این مورد روی اینترنت یه قطعه کد قابل اجرا به راحتی پیدا نمیشه و برای همین اون رو اینجا قرار میدم.
روش کار هم ساده است.
1- در Resource View راست کلیک کنید و گزینه Add و سپس Resource رو انتخاب کنید.
2- دکمه Import رو بزنید و فایل مورد نظر خودتون رو انتخاب کنید.
3- در پنجره Custome Resource Type ، باید برای Resource type مقدار EXE رو وارد کنید.
4- حالا قطعه کد زیر این فایل موجود در resource رو براتون استخراج میکنه.
HMODULE exe = GetModuleHandleA(NULL); HRSRC hResInfo = FindResourceA(exe, MAKEINTRESOURCEA(IDR_EXE1), "EXE" ); HGLOBAL hRes = LoadResource(exe, hResInfo); LPVOID memRes = LockResource(hRes); DWORD sizeRes = SizeofResource(exe, hResInfo); FILE* fexe = fopen("C:\\e.exe", "wb" ); for(int i=0; i<sizeRes; i++ ) fwrite( (LPVOID)(((char*)memRes+i)), sizeof(char), 1, fexe); fclose(fexe);
نکته ها:
1- "EXE" (پارامتر سوم FindResourceA ) همان چیزی است که به عنوان Resource type وارد کردید.
2- اگر پارامتر GetModuleHandleA را NULL قرار دهید، دستگیره ماژول جاری رو برمیگردنه
3- داخل حلقه for به کمک عملگر جمع روی اشاره گرها، بایت های resource رو پیمایش می کنیم.
4- IDR_EXE1 شناسه همان فایلی است که به Resource ها اضافه کردیم.
لینک دانلود کد: