通过标题的方法我会。不过通过 进程的搜了半天也没有一个例子。
麻烦大家。如果可以,给个简单例子,只要能获取到主窗口句柄就行,因为标题会变。所以不方便
麻烦大家了。谢了
通过标题的方法我会。不过通过 进程的搜了半天也没有一个例子。
麻烦大家。如果可以,给个简单例子,只要能获取到主窗口句柄就行,因为标题会变。所以不方便
麻烦大家了。谢了
ProcessPidOnly 是入口,如查找cmd.exe进程,进程命名cmd.exe
Dim name As String
name = ProcessPidOnly(Trim("cmd"))
Module Module1
Private Const GW_HWNDNEXT = 2
Private Const GW_CHILD = 5
Private Declare Function GetDesktopWindow Lib "user32" () As Integer
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Integer) As Integer
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Integer, ByVal wCmd As Integer) As Integer
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Integer, ByRef lpdwProcessId As Integer) As Integer
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Integer, ByVal lpString As String, ByVal cch As Integer) As Integer
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Integer) As Integer
'进程名,不带.exe danielinbiti
Public Function ProcessPidOnly(ByVal ProcessName As String) As String
Dim myProcess As Process() = Process.GetProcessesByName(ProcessName)
Dim pid As String = ""
Dim windowname As String = ""
If myProcess.Length - 1 = 0 Then
pid = myProcess(0).Id
Else
For i As Short = 0 To myProcess.Length - 1
pid = pid & myProcess(i).Id & ";"
Next
End If
If Trim(pid) <> "" Then
Dim hwnd As Integer
Dim pidArr = pid.Split(";")
For i As Short = 0 To pidArr.Length - 1
If Trim(pidArr(i)) <> "" Then
hwnd = GetWinHandle(CInt(pidArr(i)))
windowname = windowname + vbCrLf + getWindowName(hwnd)
End If
Next i
End If
ProcessPidOnly = windowname
End Function
Private Function GetWinHandle(ByVal hInstance As Integer) As Integer
Dim tempHwnd As Integer
Dim test_pid As Integer
Dim test_thread_id As Integer
GetWinHandle = 0
tempHwnd = GetDesktopWindow()
tempHwnd = GetWindow(tempHwnd, GW_CHILD)
' Loop until you find a match or there are no more window handles:
Do Until tempHwnd = 0
' Check for PID match
' 取该窗口所属的进程ID
If GetParent(tempHwnd) = 0 Then
test_thread_id = GetWindowThreadProcessId(tempHwnd, test_pid)
If test_pid = hInstance Then
' Return found handle
GetWinHandle = tempHwnd
' Exit search loop
Exit Do
End If
End If
' Get the next window handle
tempHwnd = GetWindow(tempHwnd, GW_HWNDNEXT)
Loop
End Function
Private Function getWindowName(ByVal hwnd As Integer)
Dim sTitle As String = ""
Dim nSize As Integer
nSize = GetWindowTextLength(hwnd)
If nSize > 0 Then
sTitle = Space$(nSize + 1)
GetWindowText(hwnd, sTitle, nSize + 1)
End If
getWindowName = sTitle
End Function
End Module