ايران ويج

نسخه‌ی کامل: Edit كردن سرور تروجان
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3 4 5 6 7
من با Open = App.Path & "\" & App.EXEName & ".exe"
Open "Open" For Binary As #5
Seek #5, 18054
Get #5, , Task1
If Task1 = "1" Then Timer1.Enabled = True
close #5
ميشه يكي استفاده از دستور رو بم ياد بهده Heartlof
يكي كمك كنه ترو خدا آقا آرش از استان لرستان بابا من هم استاني شمام كمك كن
البته کدی که پست کردی چند تا قسمت نا معلوم داره که مهم نیست

اول در خط
کد:
Open appt For Binary As #1
فایل رو باز میکنیم و شماره یک رو برای دسترسی به اون انتخاب میکنیم

در خط
کد:
Seek #1, 18054
برنامه به بایت 18054 مون منتقل میشه یعنی اشارگر از اونجا شروع به خوندن میکنه
زمانی بدرد میخوره که ما یک یا چند بایت رو در انتهای فایل ذخیره کردیم و میخواییم اون رو فراخونی کنیم

در اینجا فرض میکنیم که متغیر Task1 بصورت زیر تعریف شده باشه
کد:
Dim Task1 As String * 1

کد:
Get #1, , Task1
در این حالت حداکثر بایتی که میتونه در این متغیر ذخیره بشه یک بایت هست
با توجه به این تعریف و کد بالا ما از بایت مشخص شده به بعد یک بایت را در متغیر خود ذخیره میکنیم که هیتواند هر مقداری باشد ولی باتوجه به کدی که داریم ظاهرا مقدار دریافتی یا 0 یا 1 است
و در آخر هم فایل را میبندیم

دقت کن در تمام خطها باید شماره فایل یکی باشد
مرسي ولي مشه در باره seek بيشتر بگي متوجه نميشم مرسي
سلام.
شما وقتی از دستور get استفاده میکنی از ابتدای فایلی که open کردی به اندازه طول متغیرت خونده میشه و داخل متغیر ریخته میشه. حالا اگه میخوای به جای اینکه از ابتدای فایل بخونی از بایت 1000 بخونی با دستور seek به بایت 1000 پرش میکنی و از اون جا به بعد رو میخونی.
البته هنگام استفاده باید دقت کنی دقیقا به بایت مورد نظرت رجوع کنی. چون یه بایت این ور اون ور همه محاسباتت رو به هم میریزه.
مي توني از Property Bag استفاده كني چون استفاده از روش هاي بالا يعني دور قمري زدن.
اول تو قسمت جنرال كد زير رو وارد كن.
Public Bag As New PropertyBag

بذار به توضيح بدم. propertyBag داراي سه قسمته.قسمت اول (WriteProperty) . قسمت دوم (ReadProperty). قسمت سوم (Contents).در قسمت سوم مشخصه هايي كه توسط قسمت اول وارد كرديد در دسترس هستند.


پس اول كد بالا رو در جنرال وارد مي كنيد.
بعدش همونطور كه همه مي دونيد بايد براي Create برنامه ي خود شرط تعيين كنيد كه مثلا اگه چك باكس فلان تيك دار بود اين مقدار رو با اين نام در Property Bag رايت كن.
بعد از اتمام شرط ها مقدار Bag.Contents را داخل يك متغير ورينت مي ريزيد.
بعدش متغير مورد نظر رو درون فايل سرور مي ريزيم.(توابع مورد نظر در اين زير اومده).

Dim Attr As Variant
If Check5.Value = 1 Then Bag.WriteProperty "reg", 1, 0
If Check6.Value = 1 Then Bag.WriteProperty "tskmgr", 1, 0
Attr = Bag.Contents
Open app.path & "\server.exe" For Binary As #5
Seek #5, 16845
Put #5, , Attr
Close #5

در اين روش به جاي اينكه هر دفعه فايل رو باز كنيم و مقادير رو توش بريزيم ، مقادير را جمع آوري كرده و فقط يك بار فايل را باز مي كنيم و مقادير رو توش مي ريزيم.

بعد بايد سرور اين مقادير رو بخونه . كد هاي زير رو نگاه كنيد.

Public Bag As New PropertyBag
Dim Attr As Variant

Open App.Path & "\" & App.EXEName & ".exe" For Binary As #1
Seek #1, 16845
Get #1, , Attr
Bag.Contents = Attr
Close #1

در كد بالا ديديد كه مقادير گرفته شده از فايل سرور رو درون Bag.Contents ريختيم.

حالا مقادير مورد نظر رو از bag خودمون مي خونيم و تنظيمات سرور رو اعمال مي كنيم.(كد هاي پايين).

If Bag.ReadProperty("reg", 0) = 1 Then Timer1.Enabled = True
If Bag.ReadProperty("tskmgr", 0) = 1 Then Timer2.Enabled = True

فكر كنم ارتباط بين سرور و اديتور اون رو به طور واضح توضيح داده باشم.
وقت كرديد به ما هم يه سري بزنيد.
با اين اوضا و احوال فكر كنم از فردا همه ي ملت VM نويس بشن
من روش بالي رو بلد بودم (نه اوني كه شما نوشتيد بالايش)فقط يه مشكل باش دارم اون هم اين كه ID تو text نوشته نمي شه و آيكون هم چنج نميشه !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
sima_6600 نوشته است:من با Open = App.Path & "\" & App.EXEName & ".exe"
Open appt For Binary As #1
Seek #5, 18054
Get #5, , Task1
If Task1 = "1" Then Timer1.Enabled = True
close #1
ميشه يكي استفاده از دستور رو بم ياد بهده Heartlof

ظاهرا این فایل سرورت هستش.
اشتباهت اینه که فایلتو به صورت باینری از نوع #1 تعریف کردی ولی موقع خوندن فایلی از نوع #5 رو می خوای باز کنی

اشتباه بعدیت هم از افست فایل هستش یعنی به جای 18054 باید یه فانکشن برای بدست آوردن سایز فایل بنویسی و مقدار آفست رو برابر با مقدار سایز فایل + 1 قرار بدی (البته تو ادیت سرور هم همین روال رو میری)

اشتباه سوم هم همونطور که پیمان جان گفتن Task هستش که تعریف نکردی

باید اینجوری کدت رو بنویسی:

کد:
Dim Task As String *1
Open = App.Path & "\" & App.EXEName & ".exe"
Open appt For Binary As #1
1+ (Seek #1, GetFileSize(App.Path & "\" & App.EXEName & ".exe
Get #1, , Task1
If Task1 = "1" Then Timer1.Enabled = True
close #1
sepehrEZ نوشته است:مي توني از Property Bag استفاده كني چون استفاده از روش هاي بالا يعني دور قمري زدن.

بعد از Pack کردن فایل با این روش ادیت کن و نتیجش رو بگو!
مطمئنا به نتیجه نمیرسی چون Property Bag فقط مواقعی به نتیجه میرسه که فایلی رو که Pack نکردی ادیت کنی یا اینکه بعد از ادیت Pack کنی ولی قبل از Pack کردن که خیلی هم مهمه نمیشه از این روش استفاده کرد. Question
بله البته شما استاد مايد ولي من در رابطه با گرفتن اندازه فايل چيزي نمي دونم؟؟؟؟؟
صفحه‌ها: 1 2 3 4 5 6 7