我有这样一段代码Dim wshshell
Set wshshell = CreateObject("WScript.Shell")
wshshell.Run ("cmd /c d:\aa\bb.exe")
Sleep 3000
wshshell.SendKeys ccccc
Sleep 800
wshshell.SendKeys "{ENTER}"bb是个dos运行程序bb程序在运行之后,会有个提示,要求输入一些条件,我这里让VB自动应答,假设是cccc,然后回车开始执行请问这样的情况,应该怎么去判断是否执行完毕,也就是说如何判断dos窗口是否已经运行完毕并且关闭.

解决方案 »

  1.   


    '使用WaitForSingleObject来等待Shell执行完后再执行下面操作
    '先申明如下API
    Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
    Private Const SYNCHRONIZE = &H100000
    Private Const INFINITE = &HFFFFFFFF'调用如下
    Dim pId As Long, pHnd As Long
    pId = Shell(要执行的应用程序)
    pHnd = OpenProcess(SYNCHRONIZE, 0, pId)
    If pHnd <> 0 Then
       Call WaitForSingleObject(pHnd, INFINITE)
       Call CloseHandle(pHnd)
       '执行你下面的操作
        '..................
    else
       msgbox "调用失败"
    End If