1.WinExec(LPCSTR lpCmdLine,UINT uCmdShow)
>>参数:
lpCmdLine:指定程序的相对路径或绝对路径,命令行参数
uCmdShow:指定窗口的显示方式
>>窗口的显示方式:
SW_SHOW:显示窗口
SW_MAXIMIZE:最大化窗口
SW_MINIMIZE:最小化窗口
SW_NORMAL:正常显示窗口
SW_HIDE:隐藏窗口
>>例子
UINT result = WinExec("notepad",SW_SHOW); //打开记事本程序
if(result < 32){ printf("执行失败,错误代码%d",result); }
2.ShellExecute()、ShellExecuteEx()
>>ShellExecute函数原形:
HINSTANCE ShellExecute(HWND hwnd , LPCTSTR lpOperation , LPCTSTR lpFile , LPCTSTR lpParameters , LPCTSTR lpDirectory , INT nShowCmd );
>>参数:
hwnd:指定父窗口句柄
lpOperation:指定操作方式,"open","pr.int","explore"分别表示打开,打印,搜索,如果为NULL则默认是打开方式
lpFile:指定文件或程序名
lpParameters:传递的参数
lpDirectory:默认目录
nShowCmd:显示方式
函数返回值如果大于32则表示执行成功,否则失败
>>例子:
wchar_t* operation = L"open";
wchar_t* file = L"notepad";
wchar_t* para = L"C:\a.txt";
wchar_t* dirc = L"";
HINSTANCE result = ShellExecute(NULL , operation , file , para , dirc , SW_SHOW);
wchar_t* file = L"notepad";
wchar_t* para = L"C:\a.txt";
wchar_t* dirc = L"";
HINSTANCE result = ShellExecute(NULL , operation , file , para , dirc , SW_SHOW);
>>ShellExecuteEx函数原形:
BOOL WINAPI ShellExecuteEx( LPSHELLEXECUTEINFO lpExecInfo );
>>参数:
lpExecInfo:这个参数是SHELLEXECUTEINFO结构体的地址,SHELLEXECUTEINFO结构体定义了启动程序所需要的所有信息
结构体的定义:
typedef struct _SHELLEXECUTEINFO
{
DWORD cdSize; //结构体大小
ULONG fMask; //控制其他结构体哪些生效
HWND hwnd; //所有者窗口句柄
LPCTSTR lpVerb; //相当于ShellExecute函数的lpOperation参数
LPCTSTR lpFile; //同ShellExecute函数的lpFile参数
LPCTSTR lpParameters; //同ShellExecute函数的lpParameters参数
LPCTSTR lpDirectory; //同ShellExecute函数的lpDirectory参数
int nShow; //同ShellExecute的nShowCmd参数
HINSTANCE hInstApp; //同ShellExcute函数的返回值
LPVOID lpIDList; //存储成员的特别标识符
LPCTSTR lpClass; //用以指明文件类别的名字或GUID
HKEY hkeyClass; //获得已在系统注册的文件类型的Handle
DWORD dwHotKey; //程序的热键关联
union
{
HANDLE hIcon; //获得对应文件类型的图标的Handle
HANDLE hMonitor; //将文档显示在显示器上的Handle
} DUMMYUNIONNAME;
HANDLE hProcess; //用于进行return操作的成员
}SHELLEXECUTEINFO , *LPSHELLEXECUTEINFO;
该函数返回值为布尔值,当返回true表示执行成功,返回false表示执行失败;
>>例子
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO );
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = L"open";
ShExecInfo.lpFile = L"notepad";
ShExecInfo.lpParameters = L" ";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
BOOL bResult =ShellExecuteEx( &ShExecInfo );
if(!bResult)
{
printf("执行失败!错误代码:%d",&ShExecInfo.hInstApp);
}
WaitForSingleObject(ShExecInfo.hProcess,INFINITE); //等待新启动的记事本进程退出
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO );
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = L"open";
ShExecInfo.lpFile = L"notepad";
ShExecInfo.lpParameters = L" ";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
BOOL bResult =ShellExecuteEx( &ShExecInfo );
if(!bResult)
{
printf("执行失败!错误代码:%d",&ShExecInfo.hInstApp);
}
WaitForSingleObject(ShExecInfo.hProcess,INFINITE); //等待新启动的记事本进程退出
3.CreateProcess()
使用CreateProcess()函数是最正规、最强大的进程创建方法
>>函数原形:
BOOL CreateProcess( LPCTSTR lpApplicationName , LPCTSTR lpCommandLine , LPSECURITY_ATTRIBUTES lpProcessAttributes ,
LPSECURITY_ATTRIBUTES lpThreadAttributes , BOOL bInheritHandles , DWORD dwCreationFlags , LPVOID lpEnvironment ,
LPCTSTR lpCurrentDirectory , LPSTARTUPINFO lpStartuoInfo , LPPROCESS_INFOMATION lpProcessInfomation );
>>参数:
lpApplicationName / /可执行程序文件名
lpCommandLine //要传递给可执行程序的参数
lpProcessAttributes //进程安全性,默认为NULL
lpThreadAttributes //线程安全性,默认为NULL
bInheritHandles //句柄是否可以被新进程继承
dwCreationFlags //新进程的优先级以及其他创建标志
lpEnvironment //新进程使用的环境变量
lpCurrentDirectory //新进程使用的当前目录
lpStartuoInfo //指定新进程窗口位置,大小等信息
lpProcessInfomation //传出参数,返回进程信息
>>例子:
STARTUPINFO si = {0};
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
PROCESS_INFORMATION pi ;
bool flag = CreateProcess(L"C:\Windows\notepad.exe" , NULL , NULL , NULL , FALSE , CREATE_NEW_CONSOLE , NULL , NULL , &si , &pi);
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
PROCESS_INFORMATION pi ;
bool flag = CreateProcess(L"C:\Windows\notepad.exe" , NULL , NULL , NULL , FALSE , CREATE_NEW_CONSOLE , NULL , NULL , &si , &pi);
4.system()
system函数用于在C语言环境下执行各种控制台命令,也可以用它创建一个进程
>>函数原形:
int system( const char* command );
其中只有一个参数,就是要执行的控制台命令字符串,返回值是控制台执行后的返回值。使用它需要包含process.h头文件
>>例子:
int result = system("start notepad");