نوشته شده توسط
ali190
باسلام
من چطور میتونم یه نرم افزار رو با استفاده از مسیر نرم افزار ببندم؟
توجه داشته باشید که چون برنامه در هنگام خروج log تولید میکنه واسه همین نمیخوام برنامه از طریق task manager کیل یا بسته بشه
تاکیدم بر روی مسیر برنامه هست چون از این برنامه دو تا رو سیستم نصب شده و هنگامیکه هر دو برنامه باز هست من میوام یکی از اونهارو با استفاده از مسیر برنامه ببندم
ممنون میشم راهنماییم کنید.
اول لیست پروسه های در حال اجرا رو بدست میارید. بعد سعی میکنید بازشون کنید که ببینید مسیر فایل اجرایی شون چیه.
هر کدوم که با دسترسی مناسب کار ما باز شدنی باشن رو باز می کنید و چک می کنید که آیا مسیر فایل اجرایی شون اونی که میخواهید هست یا نه.
اگر همون مسیر بود بهش فرمان بسته شدن میدید، بزرگی و کوچیکی حروف در مسیر مهم نیست ولی حتما مسیر کامل باشه چون دارید با مسیر کامل مقایسه می کنید، در مسیر نباید موارد نسبی مثل \..\ باشه :
Private Const MAX_PATH As Long = 260
Private Const PROCESS_QUERY_INFORMATION As Long = &H400
Private Const PROCESS_VM_READ As Long = &H10
Private Const PROCESS_TERMINATE As Long = &H1
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function GetModuleFileNameExW Lib "psapi.dll" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFilename As Long, ByVal nSize As Long) As Long
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function EnumProcesses Lib "psapi.dll" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32.dll" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Sub CloseApp(ByVal path As String)
Dim idProcess() As Long
Dim cbNeeded As Long
Dim cbSize As Long
Dim i As Integer
Dim lastIndex As Integer
Dim handle As Long
Dim filenameLength As Long
ReDim idProcess(0 To 1000)
Dim filenameBuffer() As Byte
Dim filename As String
Do
cbSize = 4 * (UBound(idProcess) + 1)
If EnumProcesses(idProcess(0), cbSize, cbNeeded) = 0 Then
MsgBox "Error"
Exit Sub
End If
If cbNeeded < cbSize Then
Exit Do
End If
ReDim idProcess(0 To UBound(idProcess) + 1000)
Loop While True
lastIndex = cbNeeded \ 4 - 1
For i = 0 To lastIndex
handle = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ Or PROCESS_TERMINATE, 0, idProcess(i))
If handle <> 0 Then
ReDim Preserve filenameBuffer(0 To MAX_PATH * 2)
filenameLength = GetModuleFileNameExW(handle, 0, VarPtr(filenameBuffer(0)), MAX_PATH * 2)
If filenameLength > 0 Then
ReDim Preserve filenameBuffer(0 To filenameLength * 2 - 1)
filename = filenameBuffer
If StrComp(filename, path, vbTextCompare) = 0 Then
TerminateProcess handle, 0
End If
End If
CloseHandle handle
End If
Next
End Sub
Private Sub Command1_Click()
CloseApp "c:\Windows\System32\calc.exe"
End Sub