1. 基础判断方法
' 方法1:使用WMI查询进程
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * From Win32_Process Where Name = 'notepad.exe'")
If colProcesses.Count > 0 Then
WScript.Echo "进程存在"
Else
WScript.Echo "进程不存在"
End If
2. 封装为函数
Function ProcessExists(processName)
ProcessExists = False
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * From Win32_Process Where Name = '" & processName & "'")
If colProcesses.Count > 0 Then
ProcessExists = True
End If
End Function
' 使用示例
If ProcessExists("notepad.exe") Then
WScript.Echo "记事本正在运行"
Else
WScript.Echo "记事本没有运行"
End If
3. 增强版函数(包含进程路径)
Function ProcessExistsEx(processName, Optional processPath = "")
ProcessExistsEx = False
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Dim query
If processPath <> "" Then
query = "Select * From Win32_Process Where Name = '" & processName & "' AND ExecutablePath = '" & processPath & "'"
Else
query = "Select * From Win32_Process Where Name = '" & processName & "'"
End If
Set colProcesses = objWMIService.ExecQuery(query)
If colProcesses.Count > 0 Then
ProcessExistsEx = True
End If
End Function
4. 列出所有进程
Sub ListAllProcesses()
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * From Win32_Process")
For Each objProcess in colProcesses
WScript.Echo "进程名: " & objProcess.Name & ", PID: " & objProcess.ProcessId
Next
End Sub
5. 根据PID判断进程
Function ProcessExistsByPID(pid)
ProcessExistsByPID = False
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * From Win32_Process Where ProcessId = " & pid)
If colProcesses.Count > 0 Then
ProcessExistsByPID = True
End If
End Function
6. 等待进程出现/消失
' 等待进程出现
Sub WaitForProcess(processName, timeoutSeconds)
Dim startTime
startTime = Timer
Do While Not ProcessExists(processName)
WScript.Sleep 500 ' 等待500毫秒
If Timer - startTime > timeoutSeconds Then
WScript.Echo "超时,进程未出现"
Exit Sub
End If
Loop
WScript.Echo "进程已出现"
End Sub
' 等待进程结束
Sub WaitForProcessExit(processName, timeoutSeconds)
Dim startTime
startTime = Timer
Do While ProcessExists(processName)
WScript.Sleep 500 ' 等待500毫秒
If Timer - startTime > timeoutSeconds Then
WScript.Echo "超时,进程仍在运行"
Exit Sub
End If
Loop
WScript.Echo "进程已结束"
End Sub
7. 获取进程详细信息
Sub GetProcessInfo(processName)
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * From Win32_Process Where Name = '" & processName & "'")
For Each objProcess in colProcesses
WScript.Echo "进程名: " & objProcess.Name
WScript.Echo "进程ID: " & objProcess.ProcessId
WScript.Echo "命令行: " & objProcess.CommandLine
WScript.Echo "路径: " & objProcess.ExecutablePath
WScript.Echo "工作目录: " & objProcess.WorkingDirectorySize
WScript.Echo "内存使用: " & objProcess.WorkingSetSize & " bytes"
WScript.Echo "父进程ID: " & objProcess.ParentProcessId
WScript.Echo "优先级: " & objProcess.Priority
WScript.Echo "会话ID: " & objProcess.SessionId
WScript.Echo ""
Next
End Sub
8. 完整的示例脚本
' 保存为 .vbs 文件运行
Option Explicit
' 主函数
Sub Main()
Dim processToCheck
processToCheck = "notepad.exe"
If IsProcessRunning(processToCheck) Then
WScript.Echo processToCheck & " 正在运行"
ShowProcessDetails(processToCheck)
Else
WScript.Echo processToCheck & " 没有运行"
End If
End Sub
' 判断进程是否运行
Function IsProcessRunning(processName)
Dim objWMIService, colProcesses
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * From Win32_Process Where Name = '" & processName & "'")
IsProcessRunning = (colProcesses.Count > 0)
End Function
' 显示进程详情
Sub ShowProcessDetails(processName)
Dim objWMIService, colProcesses, objProcess
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * From Win32_Process Where Name = '" & processName & "'")
WScript.Echo "找到 " & colProcesses.Count & " 个进程实例:"
For Each objProcess in colProcesses
WScript.Echo "PID: " & objProcess.ProcessId & ", 内存: " & FormatNumber(objProcess.WorkingSetSize/1024/1024, 2) & " MB"
Next
End Sub
' 运行主函数
Main
使用说明:
保存文件:将代码保存为
.vbs 文件
运行方式:
- 双击运行
- 命令行:
cscript scriptname.vbs
权限要求:需要管理员权限才能获取某些进程的完整信息
进程名注意:进程名需要包含
.exe 扩展名
注意事项:
- WMI查询在进程数量很多时可能较慢
- 进程名区分大小写
- 某些系统进程可能无法通过普通权限访问
- 可以使用通配符:
"Select * From Win32_Process Where Name Like '%notepad%'"