判断一个32位程序是否结束
Windows 3.1允许程序员使用GetModuleUsage()函数来测试一个程序或模块是否仍在运行。但是,在Windows95和Windows NT下,每个程序都在单独的环境中独立运行,因此测试过程的状态被排除在外。
Microsoft提供了一些函数来完成此功能,如WaitForSingleObject和WaitForMultipleObjects。然而,这些函数并不总是有效的。例如,如果您调用WaitForSingleObject函数来监视Internet Explorer的操作,并且您在“帮助”菜单中选择了“教程”项,结果将是系统死锁,您必须终止WaitForSingleObject函数的操作。之所以会出现这样的结果,是因为你点击“教程”后,会给Internet Explorer返回一个地址,告诉浏览器转到下一个URL。这通常发生在程序由调用它的父程序中的过程或对象启动,但反过来它必须等待父程序结束时。
本文的目的就是要解决这个问题。
声明
将函数open process Lib“kernel 32”(ByVal dwDesiredAccess &,ByVal bInherithandle&,ByVal dwProcessid&)声明为Long
将函数GetExitCodeProcess Lib“kernel 32”(ByVal h process为Long,lpexitcode为Long)声明为Long
必需的常数
常数STILL_ACTIVE = &H103
const PROCESS _ QUERY _ INFORMATION = & H400
密码
Sub ShellWait(cCommandLine作为字符串)
昏暗的外壳一样长
Dim hProc为Long
Dim lExit一样长
hShell = Shell(cCommandLine,VBNormalFocus)
hProc = open PROCESS(PROCESS _ QUERY _ INFORMATION,False,hShell)
做
GetExitCodeProcess hProc,lExit
多项活动
lExit = STILL_ACTIVE时循环
末端接头
当调用ShellWait时,在调用过程的程序结束之前,不会将控制权交给该过程。
位律师回复
0条评论