三个SDK函数:
WinExec,
ShellExecute
,
CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂。
WinExec
两个参数,前一个指定路径,后一个指定显示方式。
ShellExecute
可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等。
CreateProcess
一共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等。如果我们要得到足够多的关于新的进程的信息,控制新的进程的细节属性,若要达到这些目的,我们就需要使用CreateProcess函数了。
三个SDK函数( WinExec、ShellExec、CrateProcess
)的语法:
WinExec
这个函数最简单,只有两个参数,原型如下:
UINT
WinExec(
LPCSTR
lpCmdLine,
//
命令路径
UINT
uCmdShow
//
显示方式
;
使用方法如下:
WinExec("Notepad.exe", SW_SHOW);
//
打开记事本
WinExec("D:\\Program Files\\Test\\Test.exe",SW_SHOWMAXIMIZED);
//
以最大化的方式打开Test.exe
需要注意的是若用 SW_SHOWMAXMIZED
方式去加载一个无最大化按钮的程序,譬如Neterm,Calc
等等,就不会出现正常的
窗体,但是已经被加到任务列表里了。
ShellExecute
原型如下:
HINSTANCE
ShellExecute(
HWND
hwnd,
//父窗口句柄
LPCTSTR
lpOperation,
//操作,
打开方式
"edit","explore","open","find","print","NULL"
LPCTSTR
lpFile,
//文件名,前面可加路径
LPCTSTR
lpParameters,
//参数
LPCTSTR
lpDirectory,
//默认文件夹
INT
nShowCmd
//显示方式
);
使用方法如下:
ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL); //
打开C:\Test.txt
文件
ShellExecute(NULL, "open",
"
http://www.google.com",/
NULL,
NULL,
SW_SHOWNORMAL);
//
打开网页www.google.com
ShellExecute(NULL,"explore", "D:\\C++",NULL,NULL,SW_SHOWNORMAL);
//
打开目录D:\C++
ShellExecute(NULL,"print","C:\\Test.txt",NULL,NULL, SW_HIDE);
//
打印文件C:\Test.txt
ShellExecute不支持定向输出。
CreateProcess
原型如下:
BOOL
CreateProcess(
LPCTSTR
lpApplicationName,
//执行程序名
LPTSTR
lpCommandLine,
//
参数行
//下面两个参数描述了所创建的进程和线程的安全属性,如果为NULL则使用默认的安全属性
LPSECURITY_ATTRIBUTES
lpProcessAttributes,
//
process
security
attributes
LPSECURITY_ATTRIBUTES
lpThreadAttributes,
//
thread
security
attributes
BOOL
bInheritHandles,
//
继承标志
DWORD
dwCreationFlags,
//
创建标志
LPVOID
lpEnvironment,
//
环境变量
LPCTSTR
lpCurrentDirectory,
//
运行该进程的初始目录
LPSTARTUPINFO
lpStartupInfo,
//
用于在创建子进程时设置各种属性
LPPROCESS_INFORMATION
lpProcessInformation
//用于在进程创建后接受相关信息
;
使用方法如下:
PROCESS_INFORMATION
pi;
STARTUPINFO
si;
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
si.wShowWindow=SW_SHOW;
si.dwFlags=STARTF_USESHOWWINDOW;
bool
fRet=CreateProcess("D:\\putty.exe",NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);
可以看出,通过上面的几个不同的方法,都可以实现在应用程序中打开其他应用程序的目的,其中有些方法可能会麻烦一点,所以就需要我们根据不同的目的去选择最适合自己的方法去实现自己的目的!
关于三个SDK函数: WinExec,
ShellExecute,CreateProcess
的
其他注意事项:
1、定义头文件
在头文件stdafx.h中必须定义以下两个头文件:
#include <shlobj.h>
//
可替换为
windows.h
#include <shellapi.h>
如果定义了头文件 #include
<windows.h>的话就不必定义
#include
<shlobj.h>了,"windows.h"
不光是包含了"shellapi.h",它还定义了许多数据类型,如果没有这些数据类型,shellapi.h本身会出错。
2、定义路径
C++中所表示的路径要用 "
\\
"而不是平常所用的"
\
",所以以上三个函数表示路径都为:
Disk:\\Directory\\...\\File name
WinExec("D:\\Program Files\\Test\\Test.exe",SW_SHOWMAXIMIZED);
ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL);
bool fRet=CreateProcess("D:\\putty.exe",NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);
三个SDK函数(
WinExec
这个函数最简单,只有两个参数,原型如下:
使用方法如下:
WinExec("Notepad.exe",
WinExec("D:\\Program
需要注意的是若用
ShellExecute
原型如下:
);
使用方法如下:
ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL);
ShellExecute(NULL,
ShellExecute(NULL,"explore",
ShellExecute(NULL,"print","C:\\Test.txt",NULL,NULL,
ShellExecute不支持定向输出。
CreateProcess
原型如下:
使用方法如下:
可以看出,通过上面的几个不同的方法,都可以实现在应用程序中打开其他应用程序的目的,其中有些方法可能会麻烦一点,所以就需要我们根据不同的目的去选择最适合自己的方法去实现自己的目的!
关于三个SDK函数:
1、定义头文件
在头文件stdafx.h中必须定义以下两个头文件:
#include
#include
如果定义了头文件
2、定义路径
C++中所表示的路径要用
Disk:\\Directory\\...\\File
WinExec("D:\\Program
ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL);
bool