PDA

View Full Version : سوال: جستجو و تغییر عبارات درون یک فایل



Mohammad.sweets
شنبه 06 خرداد 1391, 18:54 عصر
سلام به همه دوستان

من دارم رو يه برنامه کار ميکنم اما مهم ترين قسمتشو نميتونم بنويسم

من ميخوام يه فايل که فرمتش inf هست رو باز کنم و اونو تو يه RICH TEXT بزارم بعد نرم افزار بگرده هرجا عبارت
=shell\\open\\command
وجود داشت عبارت بعد از اونو برداره و توي يه text بذاره (عبارت بعد از=shell\\open\\command تغيير ميکنه)

حالا اگه چنين عبارتي در متن (در کل متن) نبود ...همين کارو روي عبارت
=shell\open\command
انجام بده ....و همينطور اگه اينم نبود دنبال يه چيز ديگه بگرده و عملياتو روي اون انجام بده

من ويژوال بيسيک رو خيلي خوب بلد نيستم
اگه ميشه راهنماييم کنيد:ناراحت:

arenaw
شنبه 06 خرداد 1391, 19:31 عصر
سلام
این کدی که واست نوشتم شامل 2 تا چیزی که تو گفتی میشه، چون میدونم حالت های دیگه هم داره، کدش رو اونجایی که علامت گذاشتم بنویس

Dim cLine$
Open "Your File" For Input As #1
Do Until EOF(1)
Line Input #1, cLine
If cLine Like "shell*open*command*" Then Print Mid(cLine, InStr(cLine, "=") + 1)
'inja mutini shartaye dg bezari
Loop
Close

میخوای آنتی ویروس واسه فایلهایی که تو درایوا کپی میشن بنویسی؟

Mohammad.sweets
شنبه 06 خرداد 1391, 22:09 عصر
دستت درد نکنه از این کدت .....
تقریبا چیزی رو که میخواستم بدست آوردم اما...
این کدی که دادی خط به خط میگرده ..
یعنی اگه من دنباله دوتا جمله ی
=open و=shell\\open\\command بگردم اگه تو خط اول کلمه ی =open نبود اونوقت تو همون خط اول دنبال اونیکی جمله میگرده ...
اما من میخوام دنبال کلمه ی =open تو کل یه فایل خط به خط بگرده و اگه تو هیچ خطی نبود اونوقت از نو دنبال کلمه ی بعدی تو کل خط ها بگرده
نمیدونم منظورم و رسوندم یا نه

من اینو برای برای ویروسای اوتوران دار مینویسم (یه Anti Autorun)

arenaw
شنبه 06 خرداد 1391, 22:34 عصر
چیزی که من فهمیدم از حرفت این بود که اگه کلا یه خط open= داشت اونو تو خروجی نشون بده و بقیه رو بیخیال شه ولی اگه اون نبود دنبال دومی بگرد

Dim cLine$, Exist As Boolean, Str$, Temp$
Open "...\autorun.inf" For Input As #1
Do Until EOF(1)
Line Input #1, cLine
If cLine Like "open=*" Then Exist = True: Str = Str & Mid(cLine, InStr(cLine, "=") + 1) & vbCrLf
If cLine Like "shell*open*command=*" Then Temp = Temp & Mid(cLine, InStr(cLine, "=") + 1) & vbCrLf
Loop
If Not Exist Then Str = Temp
Print Str
Close

ولی اگه واسه این میخوای که فایل ویروسو پیدا کنی چرا میخوای اینجوری بگرده؟

محسن واژدی
شنبه 06 خرداد 1391, 22:52 عصر
سلام
میتوانید از توابع api که به منظور خواندن و نوشتن فایل های ini و در کل هرفایلی با این ساختار هستند استفاده کنید، در اینصورت سرعت خواندن اطلاعات بسیار افزایش میابد، در مورد توابع قبلا بحث شده، میتوانید در انجمن جستجو کنید

موفق باشید

Mohammad.sweets
شنبه 06 خرداد 1391, 23:00 عصر
این واقعا خوب بود و تمام چیزی رو که گفته بودم انجام داد
میشه یه چیز دیگه بهش اظافه کرد....؟
مثلا اگه تو یه فایل چنین عبارتی داشتیم:
shell\\open\\command=virus\regsvr.exe
یعنی کاری کنیم که اگه بعد از عبارت
=shell\\open\\command
عبارت دیگه ای مثل virus بود (این عبارت تغییر میکنه) و اونوقت اگه بعد از این عبارت (\) وجود داشت این عبارت هم به همراه (\) جدا کنه و عبارت regsvr.exe رو نمایش بده
فکر میکنم بشه ...........................نمیشه؟

Mohammad.sweets
شنبه 06 خرداد 1391, 23:01 عصر
این واقعا خوب بود و تمام چیزی رو که گفته بودم انجام داد
میشه یه چیز دیگه بهش اظافه کرد....؟
مثلا اگه تو یه فایل چنین عبارتی داشتیم:
shell\\open\\command=virus\regsvr.exe
یعنی کاری کنیم که اگه بعد از عبارت
=shell\\open\\command
عبارت دیگه ای مثل virus بود (این عبارت تغییر میکنه) و اونوقت اگه بعد از این عبارت (\) وجود داشت این عبارت هم به همراه (\) جدا کنه و عبارت regsvr.exe رو نمایش بده
فکر میکنم بشه ...........................نمیشه؟

میخوام از این روش نام ویروسو پیدا کنم............

arenaw
یک شنبه 07 خرداد 1391, 00:15 صبح
بیا کلا کد رو یه جور دیگه نوشتم این مشکلی ام که گفتی حل شد

Private Type Srch
Match As String
Found As String
End Type
Private Sub Command1_Click()
Dim cLine$, i%, Search(2) As Srch, Found$, Tmp$, Exist%
Exist = -1
Search(0).Match = "*open=*"
Search(1).Match = "*shell*open*command=*"
Open "E:\Users\Amir\Desktop\autorun2.inf" For Input As #1
Do Until EOF(1)
Line Input #1, cLine
For i = LBound(Search) To UBound(Search)
If cLine Like Search(i).Match Then
Tmp = Mid(cLine, InStrRev(cLine, "=") + 1)
Tmp = Mid(Tmp, InStrRev(Tmp, "\") + 1)
Search(i).Found = Search(i).Found & Tmp & vbNewLine
End If
Next
Loop
Close
For i = LBound(Search) To UBound(Search)
If Not Search(i).Found = "" Then Print Search(i).Found: Exit For
Next
End Sub


ولی کلا مشکلای دیگه هم ممکنه پیش بیاد
مثلا شاید یه فایلی اینجوری باشه open="sa" < x < اینطوری اون کتیشن ها هم جز اسم فایل یه حساب میاد و شاید مشکل درست کنه
اینم قابل حله ولی وقتی یه api هست که راحت اینکارارو واست میکنه چرا میخوای کدشو استفاده کنی؟!
منم نمیدونستم چنین چیزی هست وگرنه منم همونو از اول پیشنهاد میدادم

Mohammad.sweets
یک شنبه 07 خرداد 1391, 01:58 صبح
خیلی ممنون ......خیلی خوب بود و کارمو راه انداخت ........فکر کنم حالا بتونم شروع به نوشتن برنامه کنم:لبخندساده::قلب:

saeedmassomi
چهارشنبه 17 شهریور 1395, 11:32 صبح
سلام ...لطفا api رو با یه سورس قرار بدین با تشکر فراوان