一、使用WMI获得指定程序的进程ID,如果ID为0则表示不存在,代码如下:Function GetProcessID(strExeName As String) As Long Dim objWMIService As Object Dim colProcesslist As Object Dim objProcess As Object
Set objWMIService = GetObject("winmgmts:") Set colProcesslist = objWMIService.ExecQuery("select * from win32_process where name='" & Trim(strExeName) & "'") For Each objProcess In colProcesslist GetProcessID = objProcess.Handle Exit Function Next End Function二、如果存窗口存在,则使用EnumWindows枚举所有顶级窗口,枚举时使用GetWindowThreadProcessId获得每个窗口的进程ID,和原来通过WMI获得的进程ID一下,如果是同一个进程,则使用SetForegroundWindow或BringWindowToTop函数将窗口置前,再使用SetFocus激活窗口就行了。
FindWindow
SetWindowPox
FindWindow
SetWindowPos
Dim objWMIService As Object
Dim colProcesslist As Object
Dim objProcess As Object
Set objWMIService = GetObject("winmgmts:")
Set colProcesslist = objWMIService.ExecQuery("select * from win32_process where name='" & Trim(strExeName) & "'")
For Each objProcess In colProcesslist
GetProcessID = objProcess.Handle
Exit Function
Next
End Function二、如果存窗口存在,则使用EnumWindows枚举所有顶级窗口,枚举时使用GetWindowThreadProcessId获得每个窗口的进程ID,和原来通过WMI获得的进程ID一下,如果是同一个进程,则使用SetForegroundWindow或BringWindowToTop函数将窗口置前,再使用SetFocus激活窗口就行了。