View Full Version : سوال: توضیحات نسبتا جامع در ریسورس (Resource)
Nemesis_0131
چهارشنبه 21 فروردین 1392, 19:05 عصر
با سلام و خسنه نباشید
اول معذرت خواهی کنم بابت تایپیک ولی من سرچ زدم و مقالات هم خوندم ولی باز چندتا سوال برام باقی مونده
1.آیا بعد از کامپایل برنامه نیازه فایل ریسورس در کنارش باشه یا فقط همون فایل exe کافیه ؟
2. چطور یه فایل exe رو از ریسورس بخونم؟
البته این کد رو دیدم ولی فایلی که میسازه خرابه نمیدونم چرا :متفکر:
Dim SoundBuffer As String
SoundBuffer = StrConv(LoadResData(101, "CUSTOM"), vbUnicode)
Open "c:\Proxifier.exe" For Output As #1
Print #1, SoundBuffer
Close #1
hd2010hd
چهارشنبه 21 فروردین 1392, 19:37 عصر
با سلام
جواب سوال اولت: نیازی به فایل رسورس نیست و همون فایل exe کافیه
جواب سوال دومت:به جای outputباید random بذاری وبجای string از binary استفاده کنی
موفق باشی
محسن واژدی
چهارشنبه 21 فروردین 1392, 22:37 عصر
2. چطور یه فایل exe رو از ریسورس بخونم؟
سلام علیکم
کد زیر را بررسی کنید:
Dim bExeD() As Byte
bExeD = LoadResData(101, "CUSTOM")
Open "c:\Proxifier.exe" For Binary As #1
Put #1, , bExeD
Close 1
موفق باشید
Nemesis_0131
پنج شنبه 22 فروردین 1392, 10:46 صبح
ممنونم راستی یه یوال دیگه واسم پیش اومده
چطور میتونم فایل MANIFEST رو توی ریسورس بذارم و همیشه برنامه از خودش بخونه؟
محسن واژدی
پنج شنبه 22 فروردین 1392, 10:55 صبح
چطور میتونم فایل MANIFEST رو توی ریسورس بذارم و همیشه برنامه از خودش بخونه؟
البته تاپیک های زیادی قبلا دراینباره ایجاد شدن، برای مثال:
http://barnamenevis.org/showthread.php?278981-%D8%A7%D8%B3%DA%A9%DB%8C%D9%86-%D8%B3%D8%A7%D8%B2%DA%AF%D8%A7%D8%B1-%D8%A8%D8%A7-%D9%88%DB%8C%D9%86%D8%AF%D9%88%D8%B2&p=1230852&viewfull=1#post1230852
http://barnamenevis.org/showthread.php?292022-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%A7%D8%B3%D8%AA%D8%A7%DB%8C%D9%84-%D8%A7%DA%A9%D8%B3-%D9%BE%DB%8C&p=1283965&viewfull=1#post1283965
موفق باشید
Nemesis_0131
پنج شنبه 22 فروردین 1392, 12:01 عصر
البته تاپیک های زیادی قبلا دراینباره ایجاد شدن، برای مثال:
http://barnamenevis.org/showthread.php?278981-%D8%A7%D8%B3%DA%A9%DB%8C%D9%86-%D8%B3%D8%A7%D8%B2%DA%AF%D8%A7%D8%B1-%D8%A8%D8%A7-%D9%88%DB%8C%D9%86%D8%AF%D9%88%D8%B2&p=1230852&viewfull=1#post1230852
http://barnamenevis.org/showthread.php?292022-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%A7%D8%B3%D8%AA%D8%A7%DB%8C%D9%84-%D8%A7%DA%A9%D8%B3-%D9%BE%DB%8C&p=1283965&viewfull=1#post1283965
موفق باشید
ممنونم محسن جان برای تمام راهنمایی هایی که تا به حال کردید
من خواندم اینارو مشکل من اینه که میخوام برناممم استایل همون ویندوز رو بگیره بدون داشتن فایل اضافه یعنی فایل MANIFEST داخل ریسورس باشه یا حد اقل خودم از یه آدرس دیگه فراخوانی کنمش نا حتما کنار برنامه چون برنامم پرتابل هست.
محسن واژدی
پنج شنبه 22 فروردین 1392, 13:23 عصر
ممنونم محسن جان برای تمام راهنمایی هایی که تا به حال کردید
من خواندم اینارو مشکل من اینه که میخوام برناممم استایل همون ویندوز رو بگیره بدون داشتن فایل اضافه یعنی فایل MANIFEST داخل ریسورس باشه یا حد اقل خودم از یه آدرس دیگه فراخوانی کنمش نا حتما کنار برنامه چون برنامم پرتابل هست.
خواهش میکنم، برای این از همون راهنمایی داخل لینک دوم استفاده کنین، یعنی بعد از اینکه فایل manifest را به ریسورس اضافه کردید، apiی InitCommonControls را در یک ماژول قرار بدهید سپس اونو از طریق روال Sub Main (یا در فرم از روال Form_Initialize) فراخوانی کنین،
موفق باشید
saber67
پنج شنبه 22 فروردین 1392, 18:01 عصر
برای اینکه فایل mainfest رو داخل فایل ریسورس قرار بدیم همراه VB یه برنامه هست به اسم RC.EXE که باید ازش استفاده کنیم
نحوه استفاده ازش به این صورته:
1- تهیه فایل manifest
2- تهیه فایل دستورات ساخت ریسورس با پسوند .rc
3- ایجاد یک فایل .bat و درج دستورات نهایی ساخت فایل ریسورس و یکبار اجرای آن (این قسمت رو از طریق خط فرمان یا همون CMD هم میشه انجام داد اما این جوری یه بار کدش رو می نویسیم و دفعات بعد برای برنامه های دیگه کارمون راحتتره)
اولین مرحله:
کد manifest تو اینترنت زیاده اما اینجا یه نمونش رو می زارم:
این کد رو تو برنامه Notepad کپی کن و با اسم MyProg.exe.manifest (البته فرقی نداره چه اسمی باشه اما بار اول همین اسم رو بزار که با بقیه کدهایی که می نویسم هماهنگ باشه) ذخیرش کن تو درایو C
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32" processorArchitecture="*" version="6.0.0.0" name="mash"/>
<description>Enter your Description Here</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls" version="6.0.0.0"
language="*"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
/>
</dependentAssembly>
</dependency>
</assembly>
دومین مرحله:
یه فایل متنی دیگه باز کن و کدهای زیر رو توش کپی کن و با اسم Command.rc تو همون درایو C ذخیرش کن
#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
#define RT_MANIFEST 24
#define CONTROL_PANEL_RESOURCE_ID 123
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "MyProg.exe.manifest"
سومین مرحله:
یه فایل متنی دیگه باز کن و کد های زیر رو توش کپی کن و با اسم CreateResource.bat هر جا دلت خواست ذخیرش کن
"C:\Program Files\Microsoft Visual Studio\VB98\Wizards\RC.EXE" /r /fo "C:\MyResource.res" "C:\Command.rc"
حالا روی فایل .bat دابل کلیک کن. اگه تمام مراحل رو درست انجام داده باشی یه فایل ریسورس به اسم MyResource.res تو درایو C ساخته میشه که می تونی به برنامت اضافش کنی و دیگه نیازی نیست فایل manifest کنار برنامت باشه
البته برای این روش هم فراخوانی تابع InitCommonControls نیازه و با این کار فقط فایل manifest رو به درون فایل برنامه می بریم
Nemesis_0131
پنج شنبه 22 فروردین 1392, 18:45 عصر
خواهش میکنم، برای این از همون راهنمایی داخل لینک دوم استفاده کنین، یعنی بعد از اینکه فایل manifest را به ریسورس اضافه کردید، apiی InitCommonControls را در یک ماژول قرار بدهید سپس اونو از طریق روال Sub Main (یا در فرم از روال Form_Initialize) فراخوانی کنین،
موفق باشید
برای اینکه فایل mainfest رو داخل فایل ریسورس قرار بدیم همراه VB یه برنامه هست به اسم RC.EXE که باید ازش استفاده کنیم
نحوه استفاده ازش به این صورته:
1- تهیه فایل manifest
2- تهیه فایل دستورات ساخت ریسورس با پسوند .rc
3- ایجاد یک فایل .bat و درج دستورات نهایی ساخت فایل ریسورس و یکبار اجرای آن (این قسمت رو از طریق خط فرمان یا همون CMD هم میشه انجام داد اما این جوری یه بار کدش رو می نویسیم و دفعات بعد برای برنامه های دیگه کارمون راحتتره)
اولین مرحله:
کد manifest تو اینترنت زیاده اما اینجا یه نمونش رو می زارم:
این کد رو تو برنامه Notepad کپی کن و با اسم MyProg.exe.manifest (البته فرقی نداره چه اسمی باشه اما بار اول همین اسم رو بزار که با بقیه کدهایی که می نویسم هماهنگ باشه) ذخیرش کن تو درایو C
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32" processorArchitecture="*" version="6.0.0.0" name="mash"/>
<description>Enter your Description Here</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls" version="6.0.0.0"
language="*"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
/>
</dependentAssembly>
</dependency>
</assembly>
دومین مرحله:
یه فایل متنی دیگه باز کن و کدهای زیر رو توش کپی کن و با اسم Command.rc تو همون درایو C ذخیرش کن
#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
#define RT_MANIFEST 24
#define CONTROL_PANEL_RESOURCE_ID 123
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "MyProg.exe.manifest"
سومین مرحله:
یه فایل متنی دیگه باز کن و کد های زیر رو توش کپی کن و با اسم CreateResource.bat هر جا دلت خواست ذخیرش کن
"C:\Program Files\Microsoft Visual Studio\VB98\Wizards\RC.EXE" /r /fo "C:\MyResource.res" "C:\Command.rc"
حالا روی فایل .bat دابل کلیک کن. اگه تمام مراحل رو درست انجام داده باشی یه فایل ریسورس به اسم MyResource.res تو درایو C ساخته میشه که می تونی به برنامت اضافش کنی و دیگه نیازی نیست فایل manifest کنار برنامت باشه
البته برای این روش هم فراخوانی تابع InitCommonControls نیازه و با این کار فقط فایل manifest رو به درون فایل برنامه می بریم
باز هم ممنونم ولی من دارم گیج میشم
من تمامی فایل هم توی تمپ هست و با بستن برنامه پاک میشه
خوب محسن جان مشکلم فراخوانی از تمپ هست که فایل اجرایی من هرجا هست manifest رو از تمپ بخونه اگه یه سورس بهم بدی خیلی خیلی ممنون میشم
صابر جان از راهنمایی شما بسیار ممنونم دوست گلم ولی این روش فایل های زیادی درست میکنه که برام دردسر میشه.
محسن واژدی
پنج شنبه 22 فروردین 1392, 21:34 عصر
سلام علیکم
در کل، مراحل زیر را انجام دهید:
فایل xp style Res.res موجود در ضمیمه زیر را از طریق ابزار Resource-Editor جایگزین ریسورس فعلی کنید
تابع apiی زیر را در ماژول کد کپی کنید:Public Declare Sub InitCommonControls Lib "comctl32" ()
تابع را در رویداد Sub Main در ماژول قرار بدهید (یا Form_Initialize)
برنامه را کامپایل و تست کنید
نمونه سورس زیر را هم بررسی کنید
موفق باشید
saber67
جمعه 23 فروردین 1392, 11:04 صبح
صابر جان از راهنمایی شما بسیار ممنونم دوست گلم ولی این روش فایل های زیادی درست میکنه که برام دردسر میشه.
فایل های زیاد کدومه؟!
کلا این فایلها بودن دیگه:
MyProg.exe.manifest
Command.rc
CreateResource.bat
MyResource.res
اولی که "مانی فستی" هستش که می خوای به برنامت بچسبونی
دومی و سومی دستورات ساخت ریسورس و اضافه کردن فایل "مانی فست" به اون ریسورس هستن
آخری هم که فایل ریسورس مورد نظره
در واقع در نهایت شما فقط فایل ریسورس (MyResource.res) رو نیاز دارین، اونم برای اینکه به پروژه تون اضافش کنین تا درون فایل EXE برنامه تون کامپایل بشه. یعنی فایل اجرایی نهایی برنامه نیازی نداره هیچ کدوم از این چهار تا فایل در کنارش باشن. فایل EXE ای که از پروژت تحویل می گیری به تنهایی کاملا اجرا میشه.
اینکه گفتم اینجوری فایل ریسورس رو بسازی خوبیش اینه که اگه بعدن بخوای تغییری توی فایل manifest بدی و چیزی (بهش اضاه کنی یا کم کنی) دیگه کارت واسه ساخت ریسورس راحت باشه (چون فایل های دستورات ساخت رو داری)
این نکته رو هم بگم که فایل manifest که می خوای توی ریسورس ازش استفاده کنی حتما باید حجمش مضربی از 4 باشه!! مثلا 40 بایت یا 800 بایت یا... اگه نبود یه چند تا کاراکتر Space به آخر فایل manifest اضافه کن تا حجم فایل بشه مضرب 4
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.