判断一个32位程序是否结束

判断一个32位程序是否结束,第1张

判断一个32位程序是否结束,第2张

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时,在调用过程的程序结束之前,不会将控制权交给该过程。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 判断一个32位程序是否结束

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情