VC调用外部程序详解:WinExec、ShellExecute与CreateProcess

需积分: 4 2 下载量 20 浏览量 更新于2024-09-14 收藏 45KB DOC 举报
在Visual C++ (VC) 中,调用外部程序是一种常见的需求,本文将详细介绍三种主要的SDK函数:WinExec、ShellExecute和CreateProcess。这些函数分别满足不同场景下的应用程序调用需求。 **WinExec函数**: - **功能简述**: WinExec是最简单的调用方式,它接受两个参数:命令路径(LPCSTR lpCmdLine)和显示方式(UINT uCmdShow)。 - **使用示例**: 例如,`WinExec("Notepad.exe", SW_SHOW)` 打开记事本,`WinExec("D:\\ProgramFiles\\Test\\Test.exe", SW_SHOWMAXIMIZED)` 以最大化模式启动Test.exe。 - **限制**: WinExec仅适用于.exe文件,并且如果使用SW_SHOWMAXIMIZED调用无最大化按钮的程序,可能会导致不正常显示,但程序仍会被添加到任务栏。 **ShellExecute函数**: - **优点**: 比WinExec更灵活,支持指定工作目录(LPCSTR lpDirectory),可以利用文件关联功能直接打开,如打开网页或启动邮件发送等。 - **参数**: 除了命令路径和显示方式,还有更多可自定义选项,如指定应用程序的执行路径、工作目录等。 - **应用场景**: 可以处理更丰富的操作,如根据文件类型自动执行相应的应用程序。 **CreateProcess函数**: - **功能详尽**: CreateProcess是最复杂的调用方式,提供十个参数,允许设置进程的安全属性、继承信息、优先级等高级选项。 - **用途**: 当需要精细控制新进程的创建、监控和交互时,CreateProcess是理想选择,可以获取大量关于新进程的信息并管理其属性。 - **示例**: 使用时需要详细指定多个参数,如`CreateProcess(NULL, "C:\\Program Files\\MyApp.exe", ...)`。 选择哪个函数取决于具体需求。对于简单场景,WinExec足矣;对于需要更高级功能或者对进程控制有特殊要求的情况,ShellExecute可能更适合;而CreateProcess则提供了最大的灵活性和控制能力,但学习曲线较陡峭。在使用这些函数时,别忘了引用正确的头文件,如`windows.h` 和 `winbase.h`,同时注意它们的使用顺序。微软官方文档可以在MSDN上找到详细信息:<http://msdn.microsoft.com/en-us/library/ms687393>。