有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。
1.CreateProcess因为使用复杂,比较少用。
2.WinExec主要运行EXE文件。如:WinExec('Notepad.exe Readme.txt', SW_SHOW);
3.ShellExecute不仅可以运行EXE文件,也可以运行已经关联的文件。
HINSTANCE ShellExecute(
_In_opt_ HWND hwnd,//父窗口句柄或出错时显示错误父窗口的句柄,可以为 NULL
_In_opt_ LPCTSTR lpOperation,//操作
_In_ LPCTSTR lpFile,//要打开的文件名、执行的程序名、浏览的文件夹等。
_In_opt_ LPCTSTR lpParameters,//可执行程序的参数,否则为 NULL
_In_opt_ LPCTSTR lpDirectory,//默认目录
_In_ INT nShowCmd//显示类型
);
ShellExecute代码展示:ShellExecute((HWND)GetDesktopWindow(),_T("open"),_T("D:/DD Work/Supcon/CCTV/cctv_vs2008-z-1213/bin/cctv.exe"),_T("-p 100 100 -s 1000 1000"),_T("D:/DD Work/Supcon/CCTV/cctv_vs2008-z-1213/bin"),SW_SHOWNORMAL );
createprocess调用展示
// TCHAR szCommandLine[] = TEXT("D:/DD Work/Supcon/CCTV/cctv_vs2008-z-1213/bin/cctv.exe -p 500 500 ");//或者WCHAR
// //LPWSTR szCommandLine = TEXT("NOTEPAD");//错误
// //STARTUPINFO si = { sizeof(si) };
// STARTUPINFO si;
// PROCESS_INFORMATION pi;
// ZeroMemory(&si, sizeof(si));
// si.cb = sizeof(si);
// ZeroMemory(&pi, sizeof(pi));
//
// si.dwFlags = STARTF_USESHOWWINDOW; // 指定wShowWindow成员有效
// si.wShowWindow = TRUE; // 此成员设为TRUE的话则显示新建进程的主窗口,
// // 为FALSE的话则不显示
// BOOL bRet = ::CreateProcess (
// NULL, // 不在此指定可执行文件的文件名
// szCommandLine, // 命令行参数
// NULL, // 默认进程安全性
// NULL, // 默认线程安全性
// FALSE, // 指定当前进程内的句柄不可以被子进程继承
// CREATE_NEW_CONSOLE, // 为新进程创建一个新的控制台窗口
// NULL, // 使用本进程的环境变量
// NULL, // 使用本进程的驱动器和目录
// &si,
// &pi);
//
// if(bRet)
// {
// WaitForSingleObject(pi.hProcess, INFINITE);
// // 既然我们不使用两个句柄,最好是立刻将它们关闭
// ::CloseHandle (pi.hThread);
// ::CloseHandle (pi.hProcess);
//
// printf(" 新进程的进程ID号:%d \n", pi.dwProcessId);
// printf(" 新进程的主线程ID号:%d \n", pi.dwThreadId);
// }
//else
//{
// printf(" 错误码:%d \n",bRet );
//
//}
C++交流群:585225803