PDA

View Full Version : وارد کردن در ریسورس برنامه داخل ریسورس برنامه اصلی



سید حمید حق پرست
یک شنبه 28 اسفند 1390, 22:53 عصر
سلام
توضیح کامل :
2 برنامه نوشتیم . برنامه1 و برنامه2 ، حالا برنامه1 رو در رسورس برنامه2 قرار میدم ، بعد کمپایل میکنم
حالا من میخوام برنامه که دست کاربر میوفته هر فایلی انتخاب میکنه بره داخل ریسورس برنامه ی1 که در برنامه1 در ریسورس برنامه2 هست

ممنون میشم راهنماییم کنید


یا علی (ع)

بهروز عباسی
یک شنبه 28 اسفند 1390, 22:57 عصر
ببین این نمونه به دردت میخوره
84392

setroyd
یک شنبه 28 اسفند 1390, 23:29 عصر
نمیشه ! مگر اینکه فایل رو open کنی و بیت به بیت بخونی و جایگزین کنی .

سید حمید حق پرست
یک شنبه 28 اسفند 1390, 23:31 عصر
ممنون . میشه یه توضیح بدید که چکار میکنه این برنامه؟

بازم ممنون


یا علی (ع)

سید حمید حق پرست
یک شنبه 28 اسفند 1390, 23:32 عصر
من میخوام ستاب ساز بسازم . مشکلم در قرار دادن فایلهاست

راستی وقتی کمپایل میکنم سیستم به ویروس میشناسه .
من یکی میخوام که به ویروس نشناسه چون برنامم وارد بازار بشه این باعث میشه کسی نتونه نصب کنه و میگن ویروسه


یا علی (ع)

بهروز عباسی
یک شنبه 28 اسفند 1390, 23:35 عصر
ممنون . میشه یه توضیح بدید که چکار میکنه این برنامه؟
اگه با منی خواهش میکنم سورس کد رو ببینی به صورت فینگلیش توضیح داده

سید حمید حق پرست
یک شنبه 28 اسفند 1390, 23:54 عصر
اگه با منی خواهش میکنم سورس کد رو ببینی به صورت فینگلیش توضیح داده
اره دوست عزیز ممنون ولی انتی ویروس نمیزار اجرا بشه و کمپایل که میکنم حذف میشه

همونطور که گفتم میخوام ستاب ساز بسازم که اینجاش گیر کردم . برای قسمتی که کاربر پروژشه ی کمپایل شده رو به برنامه میخواد اضافه کنه تا ستابشو بسازه . ستاب سازهای دیگه پس از چی استفاده میکنن بجز ریسورس راه دیگه ای هست؟

ممنون میشم راهنماییم کنید


یا علی (ع)

setroyd
یک شنبه 28 اسفند 1390, 23:59 عصر
اره اضافه کردن برنامه انتهای فایل exe مثل winrar و..... اخه با vb یکم سخته ولی شدنیه اونم با open کردن فایل فکر نم بشه بخونی و بنویسی اطلاعات رو داخلش من خودم قبلا یه تاپیک در این باره زدم ولی بی جواب موند

بهروز عباسی
دوشنبه 29 اسفند 1390, 00:05 صبح
ولی انتی ویروس نمیزار اجرا بشه و کمپایل که میکنم حذف میشه؟
منم نفهمیدم چرا هر برنامه ای باVb نوشتم که ریسورس داشت آنتی ویروس هم قد علم میکرد.


همونطور که گفتم میخوام ستاب ساز بسازم که اینجاش گیر کردم . برای قسمتی که کاربر پروژشه ی کمپایل شده رو به برنامه میخواد اضافه کنه تا ستابشو بسازه . ستاب سازهای دیگه پس از چی استفاده میکنن بجز ریسورس راه دیگه ای هست؟
راه دیگه بعضی فکر کنم فایل هاروی خودشون مینوسن چون وقتی فایلهای ستاپ رو با برنامه مثلاًResource Hacker 3.4یاPE Explorer باز میکنم خبری از ریسورس نیست اگه دلفی بلد باشی یه نمونه open source تویه سایت هست در بخش Open Source

بهروز عباسی
دوشنبه 29 اسفند 1390, 00:14 صبح
ولی انتی ویروس نمیزار اجرا بشه و کمپایل که میکنم حذف میشه؟
آنتی ویروست رو غیر فعال کن برنامه امنو امانه این برنامه با کمی تغییر میتونه چیزی باشه که میخوای (البته خیلی ساده اصل ایدشه)

بهروز عباسی
دوشنبه 29 اسفند 1390, 00:20 صبح
اره اضافه کردن برنامه انتهای فایل exe مثل winrar و..... اخه با vb یکم سخته ولی شدنیه اونم با open کردن فایل فکر نم بشه بخونی و بنویسی اطلاعات رو داخلش من خودم قبلا یه تاپیک در این باره زدم ولی بی جواب موند
توی کدی گذاشتم دقیقاًفایلی که داخل ریسورس قرار میگیره اطلاعات رو از آخر خودش میخونه
Public Sub Main()
On Error Resume Next 'har khatai pish biad khate badi(code badi) ejra mishe.
' dar vaghe on khate khatadar ro bikhial mishim :D
Open App.Path + "\" + App.EXEName + ".exe" For Binary As #4 'file ro baz mikonim
Get #4, LOF(4) - 3, BeginP '3taye akhar ro mikhunm
Seek #4, BeginP 'be andaze oon 3ta tu file az aval jelo mirim
Get #4, , varData ' hala inai ke gerefte mishe propertyage(az noe variant)
'age ye bar dige in amalo tekrar konim on 3taie akhar ro migirim
DataBag.Contents = varData 'dadehai ke gereftim variant bud mirizimesh tu ye moteghaiere property bag
Close #4 'fekr konam ba in bastamesh :D

سید حمید حق پرست
دوشنبه 29 اسفند 1390, 01:35 صبح
توی کدی گذاشتم دقیقاًفایلی که داخل ریسورس قرار میگیره اطلاعات رو از آخر خودش میخونه
Public Sub Main()
On Error Resume Next 'har khatai pish biad khate badi(code badi) ejra mishe.
' dar vaghe on khate khatadar ro bikhial mishim :D
Open App.Path + "\" + App.EXEName + ".exe" For Binary As #4 'file ro baz mikonim
Get #4, LOF(4) - 3, BeginP '3taye akhar ro mikhunm
Seek #4, BeginP 'be andaze oon 3ta tu file az aval jelo mirim
Get #4, , varData ' hala inai ke gerefte mishe propertyage(az noe variant)
'age ye bar dige in amalo tekrar konim on 3taie akhar ro migirim
DataBag.Contents = varData 'dadehai ke gereftim variant bud mirizimesh tu ye moteghaiere property bag
Close #4 'fekr konam ba in bastamesh :D


والا از سورس زیاد متوجه نشدم . هرچند توضیح کامل دادید


یا علی (ع)

بهروز عباسی
دوشنبه 29 اسفند 1390, 01:52 صبح
والا از سورس زیاد متوجه نشدم . هرچند توضیح کامل دادید
شماباید فایل کامل برنامه رو ببینی این تکه کدرو در جواب دوستمون گفتم(بخش کوچکی از فایل اصلی)

الان که چشمام تقرباً از جمجمم خارج شده چند دقیقه دیگه به مونیتور نگاه کنم ممکنه دود بشن برن هوا همین روزا یک فایل pdf آموزسی توپ دراین باره(این برنامه )باتوضیح کامل برات میذارم
یاشاید چیز بهتری گیر آوردم

سید حمید حق پرست
دوشنبه 29 اسفند 1390, 10:45 صبح
دوباره سلام
من انتی رو غیر فعال کردم و تونستم برنامه رو کمپایل کنم اما هنگامی که اجرا کردم انتی حذفش کرد . نمیدونم چشه:گریه:

یا علی (ع)

setroyd
سه شنبه 01 فروردین 1391, 01:30 صبح
دوست عزیز کدی که شما گذاشتی هوشمند نیست و قادر به جدا سازی نیست و نمیتونه چند فایل رو در بر بگیره به صورت جدا جدا و دوباره برگردونه این کدی که اخرش اضافه میشه کاری نداره با یکی باز کن فایل رو با یکی بخون و اخر اون اضافه کن ولی اگه بتونی این کاری که گفتم بکنی عالی میشه مثل winrar فقط با این تفاوت که این برنامه حجم رو کاهش نمیده . اگه دیدی میتونی یه تاپیک بزن در این باره شروع کنیم و به نتایج خوبی برسیم .

بهروز عباسی
سه شنبه 01 فروردین 1391, 02:49 صبح
دوست عزیز کدی که شما گذاشتی هوشمند نیست و قادر به جدا سازی نیست و نمیتونه چند فایل رو در بر بگیره به صورت جدا جدا و دوباره برگردونه این کدی که اخرش اضافه میشه کاری نداره با یکی باز کن فایل رو با یکی بخون و اخر اون اضافه کن ولی اگه بتونی این کاری که گفتم بکنی عالی میشه مثل winrar فقط با این تفاوت که این برنامه حجم رو کاهش نمیده . اگه دیدی میتونی یه تاپیک بزن در این باره شروع کنیم و به نتایج خوبی برسیم .
خوش حال میشم کمکی کنم

اما winrar فایلها رو توی یه فایل دیگه میریزه ته روی خودش مثلاً برای فایلهای .sfx که خودکار اجرا میشن از فایلDefault.SFX استفاده میکنه

درمورد فشرده سازیم بگم فکر نکنم زیاد سخت باشه (استفاده از کدهای آماده) اما اگه بخوایم خودمون آلگوریتمی برای فشرده سازی پیاده کنیم سخت میشه

من الان (تقریباً 5 روز)وقتم پره اگه میتونید کمی در این باره تحقیق کنید تا باهم کارو شروع کنیم

بهروز عباسی
سه شنبه 01 فروردین 1391, 02:59 صبح
دوباره سلام
من انتی رو غیر فعال کردم و تونستم برنامه رو کمپایل کنم اما هنگامی که اجرا کردم انتی حذفش کرد . نمیدونم چشه:گریه:

یا علی (ع)
شرمنده منم هر چی با آنتی ویروسها جنگ و جدل کردم به جای نرسیدم بهش گیر میدن:کف:

سید حمید حق پرست
سه شنبه 01 فروردین 1391, 03:39 صبح
دوستان ممنون از توحهتون به این تاپیک
من میخوام یه ستاپ ساز بسازم و روش وارد کردن فایلها در EXE مهم نیست فقط یه روش شدنی باشه
من فقط اینو مشکل دارم و بقیشو میدونم
دوستن اگه راهنماییم کنید ممنونتون میشم:قلب:


یا علی (ع)

بهروز عباسی
سه شنبه 01 فروردین 1391, 03:56 صبح
دوستان ممنون از توحهتون به این تاپیک
من میخوام یه ستاپ ساز بسازم و روش وارد کردن فایلها در EXE مهم نیست فقط یه روش شدنی باشه
من فقط اینو مشکل دارم و بقیشو میدونم
دوستن اگه راهنماییم کنید ممنونتون میشم:قلب:


یا علی (ع)
قربانت دوست عزیز الان تقریبن عیده اول عیدت مبارک انشا الله سال خوبی برای شما و دیگر دوستان باشه

این که شما میگی کمی سخته(باریسورس)من هر کاری که به ذهنم رسید کردم اننتی ویروس...

یه راه دیگه هست انم اینکه:
مثل برنامه های ویروس میکر و ازاین قبیل یک برنامه editorیاcreator داشته باشیم که فایلهارو بوسیله اون داخل برنامه دیگه ای که در اصل همون فایلی که روند نصب رو انجام میده بریزیم

اگه کارت با راه حل دوم راه میفته میشه کاریش کرد

یا نه همون روش اول فقط برای اجرا آنتی ویروس پخ بشه :لبخند:

بهروز عباسی
سه شنبه 01 فروردین 1391, 05:25 صبح
اینم کد اول کد زیرو توی یه ماژول بنویس توی هردو پروزه استفاده کن
Public Type FileAddress
FADD_1 As String
FADD_2 As String
FADD_3 As String
FADD_4 As String
End Type
Public Type FileData
FData_1 As String
FData_2 As String
FData_3 As String
FData_4 As String
End Type
Public Type FileName
FName_1 As String
FName_2 As String
FName_3 As String
FName_4 As String
End Type
Public FADD As FileAddress
Public FData As FileData
Public FName As FileName
Public DataBag As New PropertyBag

کدبالا کد مشترک بین فایل creatorوبرنامه اصلی بود
کدزیر هم درون ماژون برنامه creator بنویس
برای استفاده کافیه تابع CREATING رو فراخوانی کنی
اینم کد برنامه creator که چهارتا فایل(توی این مثال 4تا فایل موسیقی که کنار پروزه بود)رو میریزه داخل برنامه بعدی
Public STR_Build_Path As String
Function Fnamerev(ByVal StrA As String) As String
Fnamerev = StrReverse(StrA)
Fnamerev = Left(Fnamerev, InStr(1, Fnamerev, "\") - 1)
Fnamerev = StrReverse(Fnamerev)
End Function

Public Sub CREATING()
On Error GoTo eRR:
With FADD
.FADD_1 = App.Path & "\FA.mp3"
.FADD_2 = App.Path & "\FB.mp3"
.FADD_3 = App.Path & "\FC.mp3"
.FADD_4 = App.Path & "\FD.mp3"
End With

Open FADD.FADD_1 For Binary As #1
Open FADD.FADD_2 For Binary As #2
Open FADD.FADD_3 For Binary As #3
Open FADD.FADD_4 For Binary As #4
With FData
.FData_1 = Space$(FileLen(FADD.FADD_1))
.FData_2 = Space$(FileLen(FADD.FADD_2))
.FData_3 = Space$(FileLen(FADD.FADD_3))
.FData_4 = Space$(FileLen(FADD.FADD_4))
End With
Get #1, , FData.FData_1
Get #2, , FData.FData_2
Get #3, , FData.FData_3
Get #4, , FData.FData_4
Close

With FName
.FName_1 = Fnamerev(FADD.FADD_1)
.FName_2 = Fnamerev(FADD.FADD_2)
.FName_3 = Fnamerev(FADD.FADD_3)
.FName_4 = Fnamerev(FADD.FADD_4)
End With

DataBag.WriteProperty "FNameF1", FName.FName_1
DataBag.WriteProperty "FNameF2", FName.FName_2
DataBag.WriteProperty "FNameF3", FName.FName_3
DataBag.WriteProperty "FNameF4", FName.FName_4

DataBag.WriteProperty "File1", FData.FData_1
DataBag.WriteProperty "File2", FData.FData_2
DataBag.WriteProperty "File3", FData.FData_3
DataBag.WriteProperty "File4", FData.FData_4

STR_Build_Path = App.Path & "\" & "Test.exe"

Dim BeginP As Long
Dim varData As Variant
Open STR_Build_Path For Binary As #5
BeginP = LOF(5)
varData = DataBag.Contents
Seek #5, LOF(5)
Put #5, , varData
Put #5, , BeginP
Close #5
MsgBox "File Successfuls Builded", vbApplicationModal + vbInformation, "Finish"
Exit Sub
eRR:
MsgBox eRR.Description, vbExclamation, "Error " & eRR.Number
End
End Sub

بهروز عباسی
سه شنبه 01 فروردین 1391, 05:30 صبح
اینم کد برنامه اصلی که فایل ها داخلشه اگه خواستی میتونی این فایل رو کامپایل کنی و با ریسورس به برنامه الحاق کنی بعد با تابع زیر از ریسورس خارجش کنی:لبخند:
Public Sub RES_Extract(ID_Ressource As String, Typ_Ressource As String, FileName As String)
Dim sType As String
Dim lFile As Long
Dim lID As Long
Dim Mt() As Byte
On Error Resume Next
lFile = FreeFile
Open FileName For Binary As #lFile
lID = CLng(ID_Ressource)
sType = Typ_Ressource
Mt = LoadResData(lID, sType)
Put #lFile, , Mt()
Close #lFile
End Sub

واین کد روبا کد زیر عوض کنی STR_Build_Path = App.Path & "\" & "Test.exe"
با این
RES_Extract "101", "custom", STR_Build_Path

کد برنامه :

Public Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, _
ByVal lpBuffer As String) As Long
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long

Public Const SW_SHOW = 5

Public TempDir As String
Public BeginP As Long
Public varData As Variant
Public DataBag As New PropertyBag
Public Sub Main()
On Error Resume Next
Open App.Path + "\" + App.EXEName + ".exe" For Binary As #4
Get #4, LOF(4) - 3, BeginP
Seek #4, BeginP
Get #4, , varData
DataBag.Contents = varData
Close #4
TempDir = Space(255)
GetTempPath 255, TempDir
TempDir = Trim(TempDir)
TempDir = Left(TempDir, Len(TempDir) - 1)

Open TempDir & DataBag.ReadProperty("FNameF1") For Binary As #1
Open TempDir & DataBag.ReadProperty("FNameF2") For Binary As #2
Open TempDir & DataBag.ReadProperty("FNameF3") For Binary As #3
Open TempDir & DataBag.ReadProperty("FNameF4") For Binary As #4

With FData
.FData_1 = DataBag.ReadProperty("File1")
.FData_2 = DataBag.ReadProperty("File2")
.FData_3 = DataBag.ReadProperty("File3")
.FData_4 = DataBag.ReadProperty("File4")
End With

Put #1, , FData.FData_1
Put #2, , FData.FData_2
Put #3, , FData.FData_3
Put #4, , FData.FData_4
Close
ShellExecute ByVal 0, "open", TempDir & DataBag.ReadProperty("FNameF1"), vbNullString, vbNullString, SW_SHOW
ShellExecute ByVal 0, "open", TempDir & DataBag.ReadProperty("FNameF2"), vbNullString, vbNullString, SW_SHOW
ShellExecute ByVal 0, "open", TempDir & DataBag.ReadProperty("FNameF3"), vbNullString, vbNullString, SW_SHOW
ShellExecute ByVal 0, "open", TempDir & DataBag.ReadProperty("FNameF4"), vbNullString, vbNullString, SW_SHOW
End Sub

بهروز عباسی
سه شنبه 01 فروردین 1391, 05:40 صبح
راستی توی این مثال باید برنامه بالا رو که کامپایل کردی اسمش رو به این نام (test.exe) تغییر بدی
به این خاطر: STR_Build_Path = App.Path & "\" & "Test.exe"

بهروز عباسی
سه شنبه 01 فروردین 1391, 05:50 صبح
کمی توضیح:
بالا گفتم(یادم نبود:کف:)
واین کد روبا کد زیر عوض کنی
STR_Build_Path = App.Path & "\" & "Test.exe"
با این
RES_Extract "101", "custom", STR_Build_Path



منظور این کد اینه که برنامه روی فایل ریسورس بنویسه و باید بصورت دستی(به اختیارخودت) مقدار بگیره
STR_Build_Pathومیگم

امید وارم این به کارت بیاد
ساعتم میگه دیر وقته بخواب:گیج: اما خورشید میگه پاشو بابا عیده:لبخند:

فعلاً یا علی