VB中使用Shell命令等待程序运行结束的实现方法
4星 · 超过85%的资源 需积分: 34 124 浏览量
更新于2024-09-11
1
收藏 47KB DOC 举报
"VB 使用 Shell 命令启动并等待程序运行结束,通过 API 调用来实现进程控制"
在VB编程中,`Shell` 函数通常用于启动一个外部应用程序,例如批处理文件、可执行文件等。然而,`Shell`函数在启动外部程序后,会立即返回到VB代码的下一行,不会等待被启动的程序运行结束。这在某些场景下可能会造成不便,比如需要确保外部程序执行完毕后再继续执行VB代码的其他部分。为了实现这样的功能,我们需要借助操作系统提供的API函数。
首先,我们需要知道每个进程都有一个唯一的Process ID(PID),这是操作系统用来区分不同进程的标识。而对进程进行更复杂的操作,如获取退出状态或终止进程,通常需要进程句柄(hProcess)。VB中的`Shell`函数返回的是PID,而不是hProcess,所以我们要使用`OpenProcess` API函数来获取hProcess。
`OpenProcess`函数接受三个参数:访问权限、继承标志和PID。访问权限参数定义了我们对目标进程能执行的操作,例如`PROCESS_QUERY_INFORMATION`允许获取进程信息,`PROCESS_TERMINATE`则允许终止进程。获取到hProcess后,我们就可以利用`WaitForSingleObject`函数来监视进程状态了。
`WaitForSingleObject`函数会阻塞调用线程,直到指定的进程对象(在这里是我们的hProcess)的状态发生改变,例如进程结束。函数的第二个参数是一个超时时间,如果在这个时间内进程仍未结束,`WaitForSingleObject`会返回,表示超时。如果希望无限等待,可以设置超时时间为`INFINITE`。
以下是一个简单的示例代码,展示了如何在VB中使用`Shell`并等待程序运行结束:
```vb
Dim pid As Long
Dim hProcess As Long
' 使用Shell启动程序,并获取PID
pid = Shell("C:\tools\spe3\pe2.exe", vbNormalFocus)
' 通过PID获取进程句柄,赋予查询和终止权限
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_TERMINATE, 0, pid)
' 等待进程结束,超时时间为INFINITE(无限等待)
Dim exitCode As Long
Do Until exitCode <> STILL_ACTIVE
exitCode = GetExitCodeProcess(hProcess, exitCode)
Sleep 100 ' 避免CPU过度占用
Loop
' 关闭进程句柄
CloseHandle hProcess
```
这段代码中,`GetExitCodeProcess`函数用于获取进程的退出代码,`STILL_ACTIVE`表示进程仍在运行。`Sleep 100`是为了避免过于频繁地检查进程状态导致CPU占用过高。
通过API函数`OpenProcess`、`WaitForSingleObject`和`GetExitCodeProcess`,VB开发者可以在`Shell`启动程序后等待其运行结束,同时还可以通过`OpenProcess`的权限参数实现更高级的进程控制,如终止进程等。这种方法增强了VB程序在处理外部进程时的灵活性和可控性。
2010-06-07 上传
2017-08-08 上传
2011-11-27 上传
2009-10-10 上传
2019-10-26 上传
2016-02-25 上传
along_110
- 粉丝: 0
- 资源: 4
最新资源
- ActionScript.3.0.Cookbook.中文完整版
- Excel 金融计算教程
- 短信平台说明,提供ACTIVEX组件源代码 VC6++
- 接口与通讯精品讲义(工业自动化)
- GSM11.11 version 8.3.0 Release 1999
- 70-526: TS: Microsoft .NET Framework 2.0 - Windows-based Client Development
- FLASH四宝贝之-使用ActionScript.3.0组件
- DOS批处理高级教程精选合编
- S7-200通讯的编程步骤
- 电大程序设计基础复习题
- ARM系列嵌入式调试笔记
- db2 9 xml guide DB2 9 XML指南
- 高质量c++编程(林锐).pdf
- 复习的好资料 网络习题
- C8051系列单片机的选型
- 郭天翔 单片机 大学经历