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

Vbscript VBS如何确定程序是否正在运行,vbscript,solidworks,Vbscript,Solidworks,我需要一种方法,使用VBScript确定具有可见窗口的进程是否处于打开状态 例如,当我关闭SolidWorks窗口时,SolidWorks.exe进程仍在运行 我怎样才能知道哪个是哪个?有什么建议吗?也许您可以使用命令行程序tasklist.exe来查看是否打开了正确的窗口 如果运行tasklist/V/FI“IMAGENAME eq sldworks.exe”并发现您感兴趣的进程与另一个进程之间存在差异,这可能会起作用 假设您可以查找特定的窗口标题: Dim pid = GetProcessI

我需要一种方法,使用VBScript确定具有可见窗口的进程是否处于打开状态

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


我怎样才能知道哪个是哪个?有什么建议吗?

也许您可以使用命令行程序
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
/
False
tasklist
提供的任何其他信息。作为参考,
任务列表
列索引为:

  • 0:“图像名称”
  • 1:“PID”
  • 2:“会话名称”
  • 3:“会话#”
  • 4:“内存使用”
  • 5:“地位”
  • 6:“用户名”
  • 7:“CPU时间”
  • 8:“窗口标题”

可以通过WMI与流程进行更高级的交互。互联网上有很多关于如何在VBScript中使用它的例子。搜索
Win32\u进程

定义“程序”的含义。因为从操作系统的角度来看,只有进程。我所说的运行意味着它可以最大化,而无需先运行.exe文件。但是solidworks在启动后第一次打开进程sldworks.exe后,它会运行该进程。在关闭任何其他程序时关闭solidworks不会停止进程sldworks.exe,因此当我的VBS搜索solidworks是否打开时,会得到一个肯定的结果,但当命令发送到solid时,程序会出现错误,因为它没有真正打开..?因此需要确定程序是否有可见窗口?我认为用VBScript是不可能的。你可以通过调用C或.NET程序来实现,但我感觉这个答案不是你想要的。是的,可能是这样。然而,它是用VBScript编写的一个相当大的程序,用于简化设计工程师的过程。问题是,现在我无法确定程序是否正在运行,因为正如您所说,要运行shell命令,必须有可见窗口。