PDA

View Full Version : پیدا کردن هندل یک برنامه از روی اسم پروسس آن



crafcrab
سه شنبه 23 آذر 1389, 16:05 عصر
سلام
در کد زیر من میتونم هندل یک پروسس که نام اون رو دارم پیدا کنم و با آن هندل برنامه رو ببندم


Private Const MAX_PATH = 260
Private Const TH32CS_SNAPPROCESS = &H2
Private Const PROCESS_ALL_ACCESS = &H1F0FFF
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 * MAX_PATH
End Type
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) 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 Process32First Lib "kernel32.dll" (ByVal hSnapshot As Long, Uprocess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32.dll" (ByVal hSnapshot As Long, Uprocess As PROCESSENTRY32) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long

Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Private Sub Command1_Click()
Dim hSnap As Long, pResult As Long, Process As PROCESSENTRY32
Dim AppName As String, pID As Long, hProcess As Long

hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
Process.dwSize = Len(Process)
pResult = Process32First(hSnap, Process)
Do While pResult <> 0
AppName = Left(Process.szExeFile, (InStr(1, Process.szExeFile, Chr(0))) - 1)
If StrComp(AppName, "notepad.exe", vbTextCompare) = 0 Then 'file name = notepad.exe ?
pID = Process.th32ProcessID
hProcess = OpenProcess(PROCESS_ALL_ACCESS, True, pID)
' -----------------
Dim MyStr As String
MyStr = String(100, Chr$(0))
GetWindowText hProcess, MyStr, 50
MsgBox MyStr
' -----------------

TerminateProcess hProcess, 0
CloseHandle hProcess
End If
pResult = Process32Next(hSnap, Process)
Loop
CloseHandle hSnap
End Sub

crafcrab
سه شنبه 23 آذر 1389, 22:50 عصر
مشکل حل شد

crafcrab
سه شنبه 23 آذر 1389, 22:51 عصر
مشکل حل شد