在线等高手的答案,解决马上送分

lp276780100 2009-05-09 02:00:52
用shell调用一外部程序时,如何跟踪该程序的执行进度,并由进度条在VB主程序显示出来(进度条显示外壳程序运行的百分比)
Private Sub Command1_Click()
Dim X As Long
X = Shell("DYNAMICS.exe", vbHide) ‘DYNAMICS.exe为外部程序
Do While StillRun(X) '循环监视外部程序的运行状态
DoEvents
Loop
msgbox "计算完毕"
End Sub

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const Process_All_Access = &HF0000 Or &H100000 Or &HFFF
'声明检测程序运行情况API函数

Private Function StillRun(ByVal ProgramID) As Boolean
'定义一个判断外壳程序运行状态的函数
Dim hProgram As Long
'ProgramID是Shell函数的返回值 (即外部程序的进程号)
hProgram = OpenProcess(Process_All_Access, False, ProgramID)
'返回被测程序的句柄hProgram
If Not hProgram = 0 Then '外部程序还在运行
StillRun = True
Else '外部程序运行结束
StillRun = False
End If
CloseHandle hProgram
End Function

上面的代码可以做到当外面程序运行结束后,提示“计算完毕”,但是有时候这个外部程序运行时间很长,有好几分钟,甚至10分钟,我想用进度条来显示这个程序当前运行的时间占总时间的百分比,高手们请解答,不甚感谢!

...全文
88 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
soar_s 2009-05-09
  • 打赏
  • 举报
回复
首要问题是外部程序中有没有进度条啊之类的东西?
Vanship 2009-05-09
  • 打赏
  • 举报
回复
进度条主要有两个作用
1、显示进度
2、告诉用户你的程序不是死掉了

既然无法得到进度,就只能做个动画,让用户耐心等待了……
m60a1 2009-05-09
  • 打赏
  • 举报
回复
你要进度条的话,很麻烦,因为你不知道进度条的MAX是多少??
lp276780100 2009-05-09
  • 打赏
  • 举报
回复
外部程序是一个封装好的exe,怎么传进来呢?等待高手解答
lp276780100 2009-05-09
  • 打赏
  • 举报
回复
我也不懂,所以来问问,假进度条看不到实际进度有什么用啊?
Vanship 2009-05-09
  • 打赏
  • 举报
回复
同意楼上的,获取外部程序进度很难
除非你能修改外部程序,让外部程序把进度信息传出来
所以 还是放个动画 做个假的进度条好了
就像XP启动时的那个进度条
vbman2003 2009-05-09
  • 打赏
  • 举报
回复
如果是应用,加个动画提示下得了...
如果是研究,我坐下学习...
lyserver 2009-05-09
  • 打赏
  • 举报
回复
这问题有点高深,恐怕得分析系统结构、指令数、指令长度、指令CPI、寻址方式等内容来计算程序运行时间,得需要高手才能解决,俺没学过计算机,只能帮顶。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧