VB6.0里实现"ShellWait"的一种简单方案(VB6.0代码)

发现在编程中使用"ShellWait"功能的场合不少.

网上有不少其它的代码,好象代码量都不是很少......

我就在想,能不能利用VB的SHELL函数返回的PID呢?

于是就翻了一下MSDN,还真让我找到了一个API:GetProcessVersion

它只有一个参数,就是PID

如果PID所关联的进程不存在了,这个API就会返回0,否则返回非零值.

哈哈,这下方便了 

于是就写成了这个东东了.

以下代码用记事本保存为ModShellEx.bas:

Attribute VB_Name = "ModShellEx"
'*************************************************************************
'**模 块 名:ModShellEx
'**说     明:增强SHELL函数
'**创 建 人:马大哈
'**描     述:紫水晶工作室  http://www.m5home.com/
'**日     期:2007年4月24日
'**版     本:V1.0
'*************************************************************************
Option Explicit

Private 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 Function

Public 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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值