VC调用外部程序:WinExec、ShellExecute与CreateProcess对比分析
需积分: 4 112 浏览量
更新于2024-09-21
收藏 45KB DOC 举报
"VC中调用外部程序的三种方式总结"
在VC++编程环境中,有三种主要的方法可以用来调用外部程序,它们分别是WinExec、ShellExecute和CreateProcess。每种方法都有其特点和适用场景。
1. **WinExec**
- WinExec是最简单的调用外部程序的方式,它只需要两个参数:一个是程序的路径(LPCSTR lpCmdLine),另一个是显示模式(UINT uCmdShow)。
- 显示模式通常使用SW_SHOW、SW_HIDE等常量,以决定程序窗口如何显示。
- 例如:`WinExec("Notepad.exe", SW_SHOW)` 将打开记事本,而 `WinExec("D:\\ProgramFiles\\Test\\Test.exe", SW_SHOWMAXIMIZED)` 会最大化启动Test.exe。
- WinExec只能用于打开.exe文件,并且如果尝试以最大化方式启动一个没有最大化按钮的程序,可能不会显示正常窗口,但程序已经在后台运行。
2. **ShellExecute**
- ShellExecute提供了更多的灵活性,它不仅可以指定工作目录,还能处理文件关联,直接打开与文件关联的应用程序。
- 例如:`ShellExecute(NULL, "open", "test.txt", NULL, NULL, SW_SHOW)` 会根据test.txt的文件类型打开相应的默认程序。
- ShellExecute还可以执行其他操作,如打开网页、发送邮件等,只需提供相应的命令或URL。
- 它的原型为:`int ShellExecute(HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd)`。
3. **CreateProcess**
- CreateProcess是最复杂的函数,提供了最多控制权,包括进程安全属性、继承信息、优先级等。
- 它有10个参数,允许对新进程进行精细控制,如创建新进程、子线程,设置进程和线程的属性等。
- 例如:`CreateProcess(NULL, "notepad.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)` 可以创建并启动记事本程序。
- 需要注意的是,CreateProcess可以处理任何可执行文件(.exe、.com等),甚至批处理文件(.bat)。
这三种函数的选择取决于具体需求。如果只需要简单地启动一个程序,WinExec是不错的选择;如果需要更高级的功能,如处理文件关联或打开浏览器,ShellExecute更为合适;而对于需要深入控制新进程的属性和行为的情况,CreateProcess是最佳选择。
在使用这些函数时,确保包含正确的头文件,如`windows.h`和`winbase.h`,并参照Microsoft官方文档以获取更详细的使用说明和注意事项。
2022-10-27 上传
2022-10-27 上传
2011-12-12 上传
2022-09-20 上传
2009-03-13 上传
2009-04-21 上传
2011-06-24 上传
2022-07-05 上传
2017-12-23 上传
sfxd123
- 粉丝: 27
- 资源: 72
最新资源
- BottleJS快速入门:演示JavaScript依赖注入优势
- vConsole插件使用教程:输出与复制日志文件
- Node.js v12.7.0版本发布 - 适合高性能Web服务器与网络应用
- Android中实现图片的双指和双击缩放功能
- Anum Pinki英语至乌尔都语开源词典:23000词汇会话
- 三菱电机SLIMDIP智能功率模块在变频洗衣机的应用分析
- 用JavaScript实现的剪刀石头布游戏指南
- Node.js v12.22.1版发布 - 跨平台JavaScript环境新选择
- Infix修复发布:探索新的中缀处理方式
- 罕见疾病酶替代疗法药物非临床研究指导原则报告
- Node.js v10.20.0 版本发布,性能卓越的服务器端JavaScript
- hap-java-client:Java实现的HAP客户端库解析
- Shreyas Satish的GitHub博客自动化静态站点技术解析
- vtomole个人博客网站建设与维护经验分享
- MEAN.JS全栈解决方案:打造MongoDB、Express、AngularJS和Node.js应用
- 东南大学网络空间安全学院复试代码解析