VBS如何确定程序是否正在运行

时间:2014-12-05 09:14:18

标签: vbscript solidworks

我需要一种方法来确定具有可见窗口的进程是否已打开,使用VBScript。

例如,当我关闭 SolidWorks 窗口时,SolidWorks.exe进程仍在运行。

我怎样才能找出哪个是哪个?有什么建议吗?

1 个答案:

答案 0 :(得分:1)

也许您可以使用命令行程序tasklist.exe来确定右侧窗口是否打开。

如果您运行tasklist /V /FI "IMAGENAME eq sldworks.exe"并找到您感兴趣的流程与另一个流程之间的差异,则可能会有效。

假设您可以查找特定的窗口标题:

Dim pid = GetProcessId("sldworks.exe", "That window title")
If pid > 0 Then
    MsgBox "Yay we found it"
End If

GetProcessId()就是这个

Function GetProcessId(imageName, windowTitle)
    Dim currentUser, command, output, tasklist, tasks, i, cols

    currentUser = CreateObject("Wscript.Network").UserName

    command = "tasklist /V /FO csv"
    command = command & " /FI ""USERNAME eq " + currentUser + """"
    command = command & " /FI ""IMAGENAME eq " + imageName + """"
    command = command & " /FI ""WINDOWTITLE eq " + windowTitle + """"
    command = command & " /FI ""SESSIONNAME eq Console"""
    ' add more or different filters, see tasklist /?

    output = Trim(Shell(command))
    tasklist = Split(output, vbNewLine)

    ' starting at 1 skips first line (it contains the column headings only)
    For i = 1 To UBound(tasklist) - 1
        cols = Split(tasklist(i), """,""")
        ' a line is expected to have 9 columns (0-8)
        If UBound(cols) = 8 Then
            GetProcessId = Trim(cols(1))
            Exit For
        End If
    Next
End Function

Function Shell(cmd)
    Shell = WScript.CreateObject("WScript.Shell").Exec(cmd).StdOut.ReadAll()
End Function

您不必返回PID,您也可以返回True / Falsetasklist提供的任何其他信息。作为参考,tasklist列索引是:

  • 0:"图片名称"
  • 1:" PID",
  • 2:"会话名称"
  • 3:"会话#"
  • 4:" Mem Usage",
  • 5:"状态"
  • 6:"用户名"
  • 7:" CPU Time"
  • 8:" Window Title"

通过WMI可以获得与流程的更高级交互。在VBScript中如何使用它的大量例子都在因特网上。搜索Win32_Process