【问题标题】:VB6: How to wait for a command to executeVB6:如何等待命令执行
【发布时间】:2016-07-11 02:05:58
【问题描述】:

我下面的代码运行没有错误。

但我需要它等到进程在这一行被杀死:WshShell.Exec "TASKKILL /F /IM " & EngineRun.ProcessID,然后再显示它已被终止的 msgbox。

Option Explicit

Dim WshShell As Object
Dim EngineRun As Object

Sub main()

Set WshShell = CreateObject("WScript.Shell")
Set EngineRun = WshShell.Exec("notepad.exe")

MsgBox EngineRun.ProcessID

WshShell.Exec "TASKKILL /F /IM " & EngineRun.ProcessID

MsgBox EngineRun.ProcessID & (" terminated")

End Sub

感谢您的帮助

【问题讨论】:

    标签: shell vb6 exec


    【解决方案1】:

    您能改用Run 方法吗?见MSDN。它支持 bWaitOnReturn 参数:

    object.Run(strCommand, [intWindowStyle], [bWaitOnReturn]) 
    

    所以你的代码看起来像:

    WshShell.Run "TASKKILL /F /IM " & EngineRun.ProcessID,4 , True
    

    【讨论】:

    • 更改为WshShell.run "TASKKILL /F /IM " & EngineRun.ProcessID, , True,我们有一个赢家!我使用 Do...Until 尝试了一种不同的方法,但你的方法更干净、更简单。感谢您的宝贵时间!
    【解决方案2】:
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    
    Set colItems = objWMIService.ExecQuery("Select * From Win32_Process")
    
    For Each objItem in colItems
        'msgbox objItem.ProcessID & " " & objItem.CommandLine
        If objItem.name = "Calculator.exe" then objItem.terminate
    Next
    

    正确地做事。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-31
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 2017-08-11
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多