小弟做的程序是有个主程序运行,通过主程序调用子程序,传递一些参数。例如:
box.exe运行后,监视进程是否结束,监测到结束后把DifficultLevel+1后继续打开运行下面是主程序的调用过程
Private Sub RunShell(cmdline As String)
    Dim hProcess As Long
    Dim ProcessId As Long
    Dim ExitCode As Long
    ProcessId = Shell(cmdline, 1)
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId)
    Do
        Call GetExitCodeProcess(hProcess, ExitCode)
        Sleep 1
        DoEvents
    Loop While ExitCode = STATUS_PENDING
    Call CloseHandle(hProcess)
End Sub通过下面这句调用相应子程序,通过传递不同的DifficultLevel以打开不同难度的游戏程序
RunShell (App.Path & "\exercises\box\box.exe " & DifficultLevel)现在程序基本运行正常,就是有个问题已经困扰了我很久:该程序在个别机器上(xp系统),当子程序(如:box.exe)运行结束后,程序运行画面消失,但是在进程中依然存在,所以主程序无法监测到子程序已经运行结束(需要手工结束进程),同一个子程序也不是每一次都出现这样的问题,但还是有时候会出现,很奇怪。
还往各位前辈帮帮小弟,先行感谢了!

解决方案 »

  1.   

    关闭一下进程如果是WIN and vista
    taskkill /pid Num
    or
    taskkill /im name.exe
      

  2.   

    哈哈,对了,还有个治标不治本的方案~~~那就是在PID有的情况下,再检测主窗体~~反正你SHELL后有PID了是吧.然后EnumWindows得到其主窗体句柄,同时检测这两个条件.如果窗体句柄无效了,就证明被关闭了呗~~~
      

  3.   

    哈哈哈,这个问题好像我曾经也遇到过,你肯定在写“子程序”的代码时,隐藏了某个窗口而不是卸载它,所以出现了这种问题。
    解决方法是:在退出“子程序”的主界面时,执行unload 方法卸载隐藏的那个窗口就行。
      

  4.   

     同意不過你在子程序的unload 中,加上end 試試