我在vb6程序中在启动应用程序之后,只能等到这个程序退出,你才能返回到你自己的程序中,如何实现在启动应用程序之后,运行程序中的代码?请指教!!
   我用Timer控件也不行

解决方案 »

  1.   

    楼主的问题好像表达得不是很清楚。
    是用shell来运行另一个程序吗?你是希望等到被运行的程序关闭退出以后才能继续执行shell后面的代码是吗?
      

  2.   

    现搜了一段代码,可以实现执行外部应用程序后一直等到其关闭,或者可以设置等待多长时间就不等了:
    Option ExplicitPrivate Declare Function GetProcessVersion Lib "kernel32" (ByVal ProcessId As Long) As Long
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Public Function ShellEx(ByVal FileName As String, Optional ByVal WindowStyle As VbAppWinStyle = vbNormalFocus, Optional ByVal DelayTime As Long = -1)
        '与SHELL函数一样的参数,不过是阻塞执行.(同步)
        'FileName - 目标文件名
        'WindowStyle - 程序运行时窗口的样式
        'DelayTime - 等待的时间,单位为ms
        '备注:
        '       DelayTime设置为-1时表示一直等待,直到目标程序运行结束
        Dim I As Long, J As Long
        
        I = Shell(FileName, WindowStyle)
        Do
            If GetProcessVersion(I) = 0 Then Exit Do
            Sleep 10
            J = J + 1
            If DelayTime <> -1 And J > DelayTime \ 10 Then Exit Do
        Loop
    End FunctionPublic Function ShellOnce(ByVal FileName As String, Optional ByVal WindowStyle As VbAppWinStyle = vbNormalFocus)
        '与SHELL函数一样的参数,但只将目标执行一次
        'FileName - 目标文件名
        'WindowStyle - 程序运行时窗口的样式
        Static I As Long
        
        If I <> 0 Then          '如果有PID值就判断其是否正在执行
            If GetProcessVersion(I) <> 0 Then Exit Function       '如果正在执行,函数返回
        End If
        I = Shell(FileName, WindowStyle)
    End Function
      

  3.   

    说的问题不太清楚。
    如果是用SHELL函数调用,你必须在其运行后才能操作你自己的程序,不过也不会出现你所说的退出后才能返回到你自己的程序中。如果是控制象WORD等操作的程序我建议在引用他们前加入如下语句:        DoEvents
    转让控制权,以便让操作系统处理其它的事件。语法DoEvents( )说明DoEvents 函数会返回一个 Integer,以代表 Visual Basic 独立版本中打开的窗体数目,例如,Visual Basic,专业版,在其它的应用程序中,DoEvents 返回 0。DoEvents 会将控制权传给操作系统。当操作系统处理完队列中的事件,并且在 SendKeys 队列中的所有键也都已送出之后,返回控制权。DoEvents 对于简化诸如允许用户取消一个已启动的过程 — 例如搜寻一个文件 — 特别有用。对于长时间过程,放弃控制权最好使用定时器或通过委派任务给 ActiveX EXE 部件来完成。以后,任务还是完全独立于应用程序,多任务及时间片由操作系统来处理。小心 确保以 DoEvents 放弃控制权的过程,在第一次 DoEvents 返回之前,不能再次被其他部分的代码调用;否则会产生不可预料的结果。此外,如果其它的应用程序可能会和本过程以不可预知的方式进行交互操作,那么也不要使用 DoEvents,因为此时不能放弃控制权。