长沙市纤凝网

VBS进程判断代码

2026-04-14 16:32:01 浏览次数:2
详细信息

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 文件 运行方式 权限要求:需要管理员权限才能获取某些进程的完整信息 进程名注意:进程名需要包含 .exe 扩展名

注意事项:

相关推荐