【问题标题】:How to get running application name by vbscript如何通过 vbscript 获取正在运行的应用程序名称
【发布时间】:2016-12-12 06:10:59
【问题描述】:

我想通过 vbscript 获取正在运行的应用程序的名称列表,并通过其主窗口标题终止应用程序。这些应用程序应列在Task Manager -> Applications tab

像这样:

从网上搜索后,我找到了类似this的vbscript:

'FUNCTION
Function ListProcessRunning()
'This function can report names from
'TaskManager -> Processes
    sComputerName = "."
    Set objWMIService = GetObject("winmgmts:\\" & sComputerName & "\root\cimv2")
    sQuery = "SELECT * FROM Win32_Process"
    Set objItems = objWMIService.ExecQuery(sQuery)
    'iterate all item(s)
    For Each objItem In objItems
        WScript.Echo objItem.Name
    Next
End Function

这个 vbscript 列出Task Manager -> Processes tag 下的所有进程名称,如下所示:

这不是我想要的。

我还发现了这个:

'FUNCTION
Function ListApplicationRunning()
'This function can report names from
'TaskManager -> Application

    Set Word = CreateObject("word.application") 
    For Each x In Word.Tasks
        WScript.Echo x.Name
    Next 
    Word.Quit 
    Set Word = Nothing 
End Function

这真的给了我我想要的,但问题是我要运行这个脚本的服务器没有Word,所以 vbscript 没有word.application,我无法为它安装一个。
我的问题是如何获取应用程序名称并以该名称终止应用程序?我不确定是否可以仅使用 vbscript,可能是 vbscriptcmd 的组合也可以。

【问题讨论】:

  • 看看this是否能解决你的问题。
  • 对不起,你的脚本会给我进程列表,这不是我想要的。非常感谢。
  • 指示的代码允许您检索窗口的标题(任务列表输出中的最后一列或代码中的task(8))。现在您可以在taskkill 中使用PID (task(1)) 或通过WMI 查询定位进程并调用进程的Terminate 方法。
  • @MCND 我明白你的意思,但我的应用程序无法通过tasklist 列出。我终于用 c++ 完成了我的任务。非常感谢。

标签: vbscript


【解决方案1】:

在 vbscript 中,我们可以做类似的事情,试一试:

Option Explicit
Call KillProcessbyName("common-api.jar")
'*********************************************************************************
Sub KillProcessbyName(FileName)
    On Error Resume Next
    Dim WshShell,strComputer,objWMIService,colProcesses,objProcess
    Set WshShell = CreateObject("Wscript.Shell")
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process")
    For Each objProcess in colProcesses
        If InStr(objProcess.CommandLine,FileName) > 0 Then
            If Err <> 0 Then
                MsgBox Err.Description,VbCritical,Err.Description
            Else
                objProcess.Terminate(0) 
            End if
        End If
    Next
End Sub
'**********************************************************************************

【讨论】:

  • 谢谢我已经试过这个脚本,但是这个脚本给了我进程列表,这不是我想要的。
【解决方案2】:
FOR /F "usebackq tokens=1-2" %i IN (`tasklist ^|findstr /b "notepad"`) DO taskkill /PID %j

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 2010-09-16
    • 1970-01-01
    相关资源
    最近更新 更多