مشاهده نسخه کامل
: تشخیص فایلی که در حال اجرا هست؟!!!!!!
MichaelQwerty
20-12-2008, 19:45
سلام دوستان
می خواستم بدونم چطور می شه برنامه ای که در حال اجرا هست مثلا در مسیر system32 یا هر مسیر دیگه ای رو تشخیص داد نکته: نمی خوام از Process استفاده بشه منظورم دستوراتی مثل openProcess و از این قبیل
MichaelQwerty
22-12-2008, 12:31
یک اندیشمند جواب ما را بدهد
_____________________________________
سلام
اولا بیشتر توضیح بدید. (دقیقا بگید که چه کاری میخواید انجام بدید. یه جوری بگید که ما سطح پایینها هم بفهمیم!)
دوما چرا نمخواین از process استفاده کنید؟
MichaelQwerty
23-12-2008, 07:49
میخوام بدونم فایلی که در مسیر خاصی وجود داره آیا اجرا شده و داره کار می کنه یا نه؟
سرعت کار برنامه میآد پایین
میتونی از این راه استفاده کنی، از On Error Go استفاده میکنیم که هر موقع برنامه مشکل پیدا کرد به err_handler که تعریف شده بپره
حالا اون برنامه اگه مسیرشو داری با دستور Open در حالت Output باز کن اگه باز بشه یعنی اجرا نیست
ولی اگه برنامه اجرا باشه چون برنامه نمیتونه دسترسی نوشتن روی فایل رو بگیره به err_handler میپره بعد هر کاری خاستی این قسمت میتونی انجام بدی
مثلا من در این کد فایل notepad.exe رو تست کردم
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این راه برای زمانی هست که تو مسیر فایل رو داشته باشه اگه نه همون بهتره از توابع پروسه ها استفاده کنی
شاد باشید
بهرام_62
24-12-2008, 13:55
ايول
بهترين راهه
آموزش استفاده از پروسه ها رو هم ميزارين؟
MichaelQwerty
24-12-2008, 22:18
دوست عزیز دستت درد نکنه ممنونم
دوست عزیز دستت درد نکنه ممنونم
ايول
بهترين راهه
آموزش استفاده از پروسه ها رو هم ميزارين؟
قابل شما رو نداشت
و در مورد پروسه ها، راه های مختلفی هست عمومی ترینش استفاده از این API ها هست
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به این صورت که اول با CreateToolhelp32Snapshot اصطلاحا یک snapshot از پروسه ها گرفته میشه
بعد با توابع Process32First و Process32Next اطلاعات تک تک پروسه ها رو میگریم
اطلاعات گرفته شده شامل این موارد هست. مثلا szExeFile نام پروسه هست و ...
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یه سورس هم میزارم برای اینکه بهتر متوجه بشین
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای اطلاعات بیشتر اون توابع رو تو MSDN بگردین اطلاعت کاملی اونجا هست، ولی باز اگه سوالی بود بپرسین
شاد باشید
بهرام_62
26-12-2008, 02:27
ایولا
بعد اگر بخوام از با استفاده از همین پروسه ها یک فایل در حال اجرا رو ببندم باید چه کار کنم؟
MichaelQwerty
26-12-2008, 09:37
Option Explicit
'EndProcess
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * 260
End Type
Private Const TH32CS_SNAPALL = &HF
Private Const PROCESS_ALL_ACCESS = &H1F0FFF
'EndProcess
Private Sub EndProcess(strProcessName As String)
Dim strEXEName As String
Dim hSnapshot As Long, lngNextProcess As Long, lngProcessHandle As Long
Dim ProcessInfo As PROCESSENTRY32
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0)
ProcessInfo.dwSize = Len(ProcessInfo)
lngNextProcess = Process32First(hSnapshot, ProcessInfo)
While lngNextProcess <> 0
strEXEName = Left(ProcessInfo.szExeFile, InStr(ProcessInfo.szExeFile, vbNullChar) - 1)
If UCase(strEXEName) = UCase(strProcessName) Then
If ProcessInfo.th32ProcessID = GetCurrentProcessId Then ProcessInfo.th32ProcessID = 0
lngProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, 0&, ProcessInfo.th32ProcessID)
TerminateProcess lngProcessHandle, 0&
DoEvents
End If
lngNextProcess = Process32Next(hSnapshot, ProcessInfo)
Wend
CloseHandle (hSnapshot)
End Sub
Private Sub Command1_Click()
EndProcess Text1.Text
End Sub
بهرام_62
26-12-2008, 20:49
میشه مثل همون قبلی یک سورس بزاری
یعنی کلا یک سورس کامل که یک تکس باکس داشته باشه و توی تکس باکس اسم exe برنامه رو که می نوسی اگر در حال اجرا بود ازت بپرسه مایل به بستنش هستی؟ و اگر یس زدی برنامه بسته بشه[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
میشه مثل همون قبلی یک سورس بزاری
یعنی کلا یک سورس کامل که یک تکس باکس داشته باشه و توی تکس باکس اسم exe برنامه رو که می نوسی اگر در حال اجرا بود ازت بپرسه مایل به بستنش هستی؟ و اگر یس زدی برنامه بسته بشه[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
من سورس قبلیه رو به اضافه بستن پروسه که MichaelQwerty هم زحمت کشیدن گزاشتن کامل کردم
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شاد باشید
MichaelQwerty
27-12-2008, 05:26
میتونی از این راه استفاده کنی، از On Error Go استفاده میکنیم که هر موقع برنامه مشکل پیدا کرد به err_handler که تعریف شده بپره
حالا اون برنامه اگه مسیرشو داری با دستور Open در حالت Output باز کن اگه باز بشه یعنی اجرا نیست
ولی اگه برنامه اجرا باشه چون برنامه نمیتونه دسترسی نوشتن روی فایل رو بگیره به err_handler میپره بعد هر کاری خاستی این قسمت میتونی انجام بدی
مثلا من در این کد فایل notepad.exe رو تست کردم
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این راه برای زمانی هست که تو مسیر فایل رو داشته باشه اگه نه همون بهتره از توابع پروسه ها استفاده کنی
شاد باشید
یک مشکل بزرگ
در این روش وقتی از این دستورات استفاده می شه فایل آسیب می بینه یعنی تو خالی میشه
حالا چرا به c:\windows\system32\notepad.exe آسیب نزده دلیلش اینه که اگه notepad رو حتی بخوای از مسیرهای
c:\windows\system32\notepad.exe
c:\windows
پاک کنی سیستم یکی میسازه یا فایل آسیب دیده رو دوباره باز سازی میکنه
اگه می خوای ببینی چه اتفاقی می افته کافی این مسیرو
c:\windows\system32\notepad.exe
به یه فایل معمولی بدی
یک مشکل بزرگ
در این روش وقتی از این دستورات استفاده می شه فایل آسیب می بینه یعنی تو خالی میشه
حالا چرا به c:\windows\system32\notepad.exe آسیب نزده دلیلش اینه که اگه notepad رو حتی بخوای از مسیرهای
c:\windows\system32\notepad.exe
c:\windows
پاک کنی سیستم یکی میسازه یا فایل آسیب دیده رو دوباره باز سازی میکنه
اگه می خوای ببینی چه اتفاقی می افته کافی این مسیرو
c:\windows\system32\notepad.exe
به یه فایل معمولی بدی
درسته این مورد که گفتین رو تست کردم دیدم خیلی ایراد داره، :44:
الان این کد رو تست کنید ببینید باز مشکلی داره
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شاد باشید
MichaelQwerty
28-12-2008, 06:33
ممنون عالی بود
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.