سلام دوستان
می خواستم بدونم چطور می شه برنامه ای که در حال اجرا هست مثلا در مسیر system32 یا هر مسیر دیگه ای رو تشخیص داد نکته: نمی خوام از Process استفاده بشه منظورم دستوراتی مثل openProcess و از این قبیل
سلام دوستان
می خواستم بدونم چطور می شه برنامه ای که در حال اجرا هست مثلا در مسیر system32 یا هر مسیر دیگه ای رو تشخیص داد نکته: نمی خوام از Process استفاده بشه منظورم دستوراتی مثل openProcess و از این قبیل
Last edited by MichaelQwerty; 20-12-2008 at 19:47.
_____________________________________یک اندیشمند جواب ما را بدهد
سلام
اولا بیشتر توضیح بدید. (دقیقا بگید که چه کاری میخواید انجام بدید. یه جوری بگید که ما سطح پایینها هم بفهمیم!)
دوما چرا نمخواین از process استفاده کنید؟
میخوام بدونم فایلی که در مسیر خاصی وجود داره آیا اجرا شده و داره کار می کنه یا نه؟
سرعت کار برنامه میآد پایین
میتونی از این راه استفاده کنی، از On Error Go استفاده میکنیم که هر موقع برنامه مشکل پیدا کرد به err_handler که تعریف شده بپره
حالا اون برنامه اگه مسیرشو داری با دستور Open در حالت Output باز کن اگه باز بشه یعنی اجرا نیست
ولی اگه برنامه اجرا باشه چون برنامه نمیتونه دسترسی نوشتن روی فایل رو بگیره به err_handler میپره بعد هر کاری خاستی این قسمت میتونی انجام بدی
مثلا من در این کد فایل notepad.exe رو تست کردم
این راه برای زمانی هست که تو مسیر فایل رو داشته باشه اگه نه همون بهتره از توابع پروسه ها استفاده کنیکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شاد باشید
ايول
بهترين راهه
آموزش استفاده از پروسه ها رو هم ميزارين؟
دوست عزیز دستت درد نکنه ممنونم
قابل شما رو نداشت
و در مورد پروسه ها، راه های مختلفی هست عمومی ترینش استفاده از این API ها هست
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به این صورت که اول با CreateToolhelp32Snapshot اصطلاحا یک snapshot از پروسه ها گرفته میشه
بعد با توابع Process32First و Process32Next اطلاعات تک تک پروسه ها رو میگریم
اطلاعات گرفته شده شامل این موارد هست. مثلا szExeFile نام پروسه هست و ...
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یه سورس هم میزارم برای اینکه بهتر متوجه بشین
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای اطلاعات بیشتر اون توابع رو تو MSDN بگردین اطلاعت کاملی اونجا هست، ولی باز اگه سوالی بود بپرسین
شاد باشید
ایولا
بعد اگر بخوام از با استفاده از همین پروسه ها یک فایل در حال اجرا رو ببندم باید چه کار کنم؟
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
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)