some code to FYI模块:
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredaccess&, ByVal bInherithandle&, ByVal dwProcessid&) As LongDeclare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpexitcode As Long) As LongConst STILL_ACTIVE = &H103
Const PROCESS_QUERY_INFORMATION = &H400
程序:
hShell = Shell("调用的程序.exe", vbNormalFocus) hProc = OpenProcess(PROCESS_QUERY_INFORMATION, False, hShell)
 Do
    GetExitCodeProcess hProc, lExit
    DoEvents
 Loop While lExit <> STILL_ACTIVE
msgbox"程序结束"

解决方案 »

  1.   

    shell函数不支持定向符号(>或>>), 在DOS模式下可以用ping 192.168.0.1 -t>1.txt 。但是用shell执行命令时将不会生成1.txt
    以上是我的个人观点.不知道是否正确.关注.. 希望高手解答......
      

  2.   

    可是问题是还是没有写文件aa.txt呀,调用程序本身是没有问题的,可是后面加上“ > c:\aa.txt”之后没有起作用,是不是因为 > c:\aa.txt 是COMMAND提供的功能呀?
      

  3.   

    同意 Cooly(Lazy) 的观点。
      

  4.   

    研究结果出来了.w2k:
    aa = Shell("cmd /c ping ComputerName>C:\aa.txt")9x:
    aa = Shell("c:\command.com /c ping ComputerName>C:\aa.txt")cmd.exe和command.com的具体路径自己指定.
    通过/c参数就可以进行重定位到文件.多谢qsqwmy(禽兽)提醒,真是一语惊醒梦中人啊....斑竹看看是否可以加到FAQ中啊,这个问题也困扰我很久了.呵呵,这样就可以不用api就可以知道当前w2k server启动了那些服务了. 爽~~~~~~~~~~~~~~
      

  5.   

    关于楼主的问题可以说是因为在执行ping ComputerName -t>c:\aa.txt时,虽然不支持>方式,但也不会产生错误,即VB的错误捕捉机制对这类错误没有反应.因此,Shell不会返回错误信息.衍生出来的问题
    如果使用Shell "ping ComputerName -t" 如何才能中断这个操作?欢迎一起来讨论.
      

  6.   

    呵呵,我也试过在cmd后跟参数,不过我没有加“/c”,所以怎么也没有试出来。看来还是DOS的基本功不扎实呀,谢谢Cooly的帮忙,呵呵,值得收藏……
    结帖喽…………………………………………
      

  7.   

    呵呵 /C 参数是指在DOS外壳下执行命令并返回结果。 :)
      

  8.   

    原来是这样,明白了,谢谢了。那个怎样捕捉DOS错误的问题好像没有人讨论哟。
      

  9.   

    我觉得让ping ComputerName -t中断应该不是很难,但是怎样捕获错误呢?
      

  10.   

    看来是没有人关注这个话题了。楼主,可以结帖了.......郁闷中...................>_<