PDA

View Full Version : پيدا كردن پنجره خط فرمان در صورت باز بودن



رامین مرادی
دوشنبه 18 شهریور 1392, 18:56 عصر
سلام دوستان من با تابع فايند ويندو اي پي آي پنجره اي خاصي رو اگه باز باشه پيدا ميكنم ولي نمي تونم پنجره خط فرمان ويندوز رو پيدا كنم
يعني اگه پنجره خط فرمان ويندوز باز باشه برام اخطار بده هم چنين پنجره ران ويندوز هم با همين مشكل مواجه ام شما بگيد چيكار كنم

mmssoft
سه شنبه 19 شهریور 1392, 04:25 صبح
من اینجوری مینویسم جواب میده؛ البته اگه عنوان cmd توی سیستم های دیگه فرق نکنه ...

Private Sub Timer2_Timer()

If FindWindow(vbNullString, "Administrator: " & Environ("SystemRoot") & "\system32\cmd.exe") Then Label1.Caption = "CMD is Running" Else Label1.Caption = "CMD is Not Running"

End Sub


واسه Run هم که دیگه مشخصه :

Private Sub Timer1_Timer

If FindWindow(vbNullString, "Run") Then Label1.Caption = "run baz ast" Else Label1.Caption = "run baste ast"


End Sub

mmssoft
سه شنبه 19 شهریور 1392, 04:27 صبح
این هم که Declare مربوط به api هستش :

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Mr'Jamshidy
سه شنبه 19 شهریور 1392, 09:42 صبح
شما میتونید با یک فرمان Title ساده عنوان CMD رو عوض کنید

بهترین راه گرفتن لیست فایل های اجرا شده هست

رامین مرادی
سه شنبه 19 شهریور 1392, 17:34 عصر
ميشه بگيد چطور ليست تسك منيجر رو بدست بيارم يا ليست برنامه هاي در حال اجرا رو ببينم.

رامین مرادی
سه شنبه 19 شهریور 1392, 17:36 عصر
در ضمن من روش پست 2و3 رو اجرا ميكنم ولي درست نيست يا حداقل تو سيستم من كار نمي كنه

Mr'Jamshidy
سه شنبه 19 شهریور 1392, 22:36 عصر
شاید با یک جستجو ساده پیدا میکردی؟

تو ماژول:
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal dwProcessId As Long) As Long
Private Declare Function Thread32Next Lib "kernel32" (ByVal hObject As Long, p As THREADENTRY32) As Boolean
Private Declare Function Thread32First Lib "kernel32" (ByVal hObject As Long, p As THREADENTRY32) As Boolean
Private Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Long
Private Declare Function OpenThread 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, lppe As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "Kernel32.dll" (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 GetProcessImageFileNameA Lib "psapi.dll" (ByVal hProcess As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long

Private Const TH32CS_SNAPALL = &HF
Private Const PROCESS_ALL_ACCESS = &H1F0FFF
Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
Private Const SYNCHRONIZE = &H100000
Private Const TH32CS_SNAPTHREAD = &H4
Private Const THREAD_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &H3FF
Private Const TH32CS_SNAPHEAPLIST = &H1
Private Const TH32CS_SNAPPROCESS = &H2
Private Const TH32CS_SNAPMODULE = &H8
Private Const TH32CS_INHERIT = &H80000000
Private Const PROCESS_QUERY_INFORMATION = 1024
Private Const PROCESS_VM_READ = 16
Private Const PROCESS_TERMINATE As Long = (&H1)

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 Type THREADENTRY32
dwSize As Long
cntUsage As Long
th32ThreadID As Long
th32OwnerProcessID As Long
tpBasePri As Long
tpDeltaPri As Long
dwFlags As Long
End Type

Function IsProcessRunning(Optional ByVal PID As Long = -1, Optional ByVal ProcessName As String = vbNullChar) As Boolean
If PID <= 0 And ProcessName = vbNullChar Then Exit Function

Dim Data() As String
Dim TaskData() As String

LoadProcList Data
IsProcessRunning = False

For i = 0 To UBound(Data) - 1
TaskData = Split(Data(i), "¤")

If Not PID <= 0 Then
If TaskData(0) = PID Then
IsProcessRunning = True
Exit Function
End If
ElseIf Not ProcessName = vbNullChar Then
If LCase$(TaskData(1)) = LCase$(ProcessName) Then
IsProcessRunning = True
Exit Function
End If
End If
Next
End Function

Function LoadProcList(ByRef Data() As String) As String
Dim Tmp As String

Dim hSnapShot As Long, uProcess As PROCESSENTRY32, r&, i&, ProcessPath$, ProcessPathLen&
Dim exe$, hProcess&

hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&)
uProcess.dwSize = 500
r = Process32First(hSnapShot, uProcess)

Do While r
hProcess& = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, uProcess.th32ProcessID)
ProcessPath$ = String(2000, Chr(0))
ProcessPathLen& = GetProcessImageFileNameA(hProcess&, ProcessPath$, Len(ProcessPath$))
ProcessPath$ = Mid(Left$(ProcessPath$, InStr(1, ProcessPath$, Chr$(0)) - 1), 23)

For i = 1 To Len(ProcessPath$)
If Mid(ProcessPath$, i, 1) = "\" Then
Select Case Left(ProcessPath$, i - 1)
Case 1 To 24
ProcessPath$ = Chr(Asc("B") + Val(Left(ProcessPath$, i - 1))) & ":" & Mid$(ProcessPath$, i)
End Select
Exit For
End If
Next i

exe = Left$(uProcess.szExeFile, IIf(InStr(1, uProcess.szExeFile, Chr$(0)) > 0, InStr(1, uProcess.szExeFile, Chr$(0)) - 1, 0))
If ProcessPath$ > "" Then
Tmp = Tmp & uProcess.th32ProcessID & "¤" & exe & "¤" & ProcessPath$ & "¤¤"
End If
r = Process32Next(hSnapShot, uProcess)
Loop

CloseHandle hSnapShot

Data = Split(Tmp, "¤¤")
End Function

توی فرم 1 لیست بزار + 2 تا CommandButton
و کد زیر رو بنویس

Option Explicit

Private Sub Command1_Click()
On Error Resume Next
Dim Data() As String
LoadProcList Data

Dim i As Integer
For i = LBound(Data) To UBound(Data)
List1.AddItem Split(Data(i), "¤")(1)
Next
End Sub

Private Sub Command2_Click()
MsgBox IsProcessRunning(, "cmd.exe")
End Sub