VB中使用Shell命令等待程序运行结束的实现方法
4星 · 超过85%的资源 需积分: 34 135 浏览量
更新于2024-09-11
收藏 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
最新资源
- Interview-Prep:学习面试等内容时,可以收集各种类型的内容,搜索内容等作为参考
- 【黑马程序员就业班】1
- Custom-Exploits:随机的东西
- Coody-Framework-original.zip
- braintree-swift:[已弃用] 在 iOS 和 OS X 上用于 Braintree v.zero 的非官方 Swift 库
- Python库 | janis-pipelines.core-0.7.7.tar.gz
- 行业文档-设计装置-同时硫化两条轮胎的轮胎模具.zip
- N12电信对接流程_TheONEnetwork_
- syslog-service:可在Mesos的基础架构角色中运行的基于Go的Syslog服务
- yolov5预训练权重文件
- Python库 | janis-pipelines.bioinformatics-0.9.4.tar.gz
- Artifact management system-开源
- 粉色的服装购物商城.zip
- Educational-Practice:白俄罗斯SU计算机科学教育实践课程第一个实验室的解决方案
- 2020国庆 2020.10.01-2020.12.31-百度迁徙数据-丽水市-迁入来源地.zip
- 工业建筑施工方案模板-27-上海某电厂燃煤机组施工组织设计