本文共 13512 字,大约阅读时间需要 45 分钟。
UINT WINAPI WinExec( _In_ LPCSTR lpCmdLine, _In_ UINT uCmdShow);参数解析:
lpCmdLine:是命令行参数,也就是使用exe的文件路径和后面的命令行参数
uCmdShow:窗口显示的风格,参数的含义可以参考MSDN
返回值:
示例代码:
//************************************************************************// 函数名称: CreateProcess_WinExec// 访问权限: public // 创建日期: 2017/06/04// 创 建 人: // 函数说明: WinExc()函数,在16位机上使用 现在过时了// 返 回 值: bool//************************************************************************bool CreateProcess_WinExec(){ using my_unit = unsigned int; my_unit return_value = WinExec("calc.exe", SW_SHOW); //创建进程 switch (return_value) { case 0: { cout << "The system is out of memory or resources." << endl; return false; } case ERROR_BAD_FORMAT: { cout << "The.exe file is invalid." << endl; return false; } case ERROR_FILE_NOT_FOUND: { cout << "The specified file was not found." << endl; return false; } case ERROR_PATH_NOT_FOUND: { cout << "The specified path was not found." << endl; return false; } default: break; } return true;}
HINSTANCE ShellExecute( _In_opt_ HWND hwnd, _In_opt_ LPCTSTR lpOperation, _In_ LPCTSTR lpFile, _In_opt_ LPCTSTR lpParameters, _In_opt_ LPCTSTR lpDirectory, _In_ INT nShowCmd);参数解析:
//************************************************************************// 函数名称: CreateProcess_ShellExecute// 访问权限: public // 创建日期: 2017/06/04// 创 建 人: // 函数说明: ShellExecute()函数// 返 回 值: bool//************************************************************************bool CreateProcess_ShellExecute(){ HINSTANCE kk = ShellExecute(NULL, TEXT("open"), TEXT("test.txt"), NULL, NULL, SW_SHOW); return true;}test.txt是工程路径下存在的文件
BOOL ShellExecuteEx( _Inout_ SHELLEXECUTEINFO *pExecInfo);其中的参数是结构体SHELLEXECUTEINFO,结构体的定义如下
typedef struct _SHELLEXECUTEINFO { DWORD cbSize; ULONG fMask; HWND hwnd; LPCTSTR lpVerb; LPCTSTR lpFile; LPCTSTR lpParameters; LPCTSTR lpDirectory; int nShow; HINSTANCE hInstApp; LPVOID lpIDList; LPCTSTR lpClass; HKEY hkeyClass; DWORD dwHotKey; union { HANDLE hIcon; HANDLE hMonitor; } DUMMYUNIONNAME; HANDLE hProcess;} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;
//************************************************************************// 函数名称: CreateProcess_ShellExecuteEX// 访问权限: public // 创建日期: 2017/06/04// 创 建 人: // 函数说明: ShellExecuteEX()函数// 返 回 值: bool//************************************************************************bool CreateProcess_ShellExecuteEX() { SHELLEXECUTEINFO ShellInfo; memset(&ShellInfo, 0, sizeof(ShellInfo)); ShellInfo.cbSize = sizeof(ShellInfo); ShellInfo.hwnd = NULL; ShellInfo.lpVerb = _T("open"); ShellInfo.lpFile = _T("calc.exe"); // 此处写执行文件的绝对路径 ShellInfo.nShow = SW_SHOWNORMAL; ShellInfo.fMask = SEE_MASK_NOCLOSEPROCESS; BOOL bResult = ShellExecuteEx(&ShellInfo); return true;}打开文件的例子
//************************************************************************// 函数名称: CreateProcess_ShellExecuteEX// 访问权限: public // 创建日期: 2017/06/04// 创 建 人: // 函数说明: ShellExecuteEX()函数// 返 回 值: bool//************************************************************************bool CreateProcess_ShellExecuteEX() { SHELLEXECUTEINFO ShellInfo; memset(&ShellInfo, 0, sizeof(ShellInfo)); ShellInfo.cbSize = sizeof(ShellInfo); ShellInfo.hwnd = NULL; ShellInfo.lpVerb = _T("open"); ShellInfo.lpFile = _T("test.txt"); // 此处写执行文件的绝对路径 ShellInfo.nShow = SW_SHOWNORMAL; ShellInfo.fMask = SEE_MASK_NOCLOSEPROCESS; BOOL bResult = ShellExecuteEx(&ShellInfo); return true;}打开网页的例子
SHELLEXECUTEINFO ShellInfo; memset(&ShellInfo, 0, sizeof(ShellInfo)); ShellInfo.cbSize = sizeof(ShellInfo);ShellInfo.hwnd = NULL; ShellInfo.lpVerb = _T("open"); ShellInfo.lpFile = _T("http://www.sina.com");ShellInfo.nShow = SW_SHOWNORMAL; ShellInfo.fMask = SEE_MASK_NOCLOSEPROCESS; BOOL bResult = ShellExecuteEx(&ShellInfo);
BOOL WINAPI CreateProcess( _In_opt_ LPCTSTR lpApplicationName, _Inout_opt_ LPTSTR lpCommandLine, _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_ BOOL bInheritHandles, _In_ DWORD dwCreationFlags, _In_opt_ LPVOID lpEnvironment, _In_opt_ LPCTSTR lpCurrentDirectory, _In_ LPSTARTUPINFO lpStartupInfo, _Out_ LPPROCESS_INFORMATION lpProcessInformation);参数解释
typedef struct _STARTUPINFO { DWORD cb; //包含STARTUPINFO结构中的字节数.如果Microsoft将来扩展该结构,它可用作版本控制手段.应用程序必须将cb初始化为sizeof(STARTUPINFO) PSTR lpReserved; //保留。必须初始化为NULL PSTR lpDesktop; //用于标识启动应用程序所在的桌面的名字。如果该桌面存在,新进程便与指定的桌面相关联。如果桌面不存在,便创建一个带有默认属性的桌面,并使用为新进程指定的名字。如果lpDesktop是NULL(这是最常见的情况 ),那么该进程将与当前桌面相关联 PSTR lpTitle; //用于设定控制台窗口的名称。如果lpTitle是NULL,则可执行文件的名字将用作窗口名.This parameter must be NULL for GUI or console processes that do not create a new console window. DWORD dwX; //用于设定应用程序窗口相对屏幕左上角位置的x 坐标(以像素为单位)。 DWORD dwY; //对于GUI processes用CW_USEDEFAULT作为CreateWindow的x、y参数,创建它的第一个重叠窗口。若是创建控制台窗口的应用程序,这些成员用于指明相对控制台窗口的左上角的位置 DWORD dwXSize; //用于设定应用程序窗口的宽度(以像素为单位) DWORD dwYSize; //子进程将CW_USEDEFAULT 用作CreateWindow 的nWidth、nHeight参数来创建它的第一个重叠窗口。若是创建控制台窗口的应用程序,这些成员将用于指明控制台窗口的宽度 DWORD dwXCountChars; //用于设定子应用程序的控制台窗口的宽度(屏幕显示的字节列)和高度(字节行)(以字符为单位) DWORD dwYCountChars; DWORD dwFillAttribute; //用于设定子应用程序的控制台窗口使用的文本和背景颜色 DWORD dwFlags; //请参见下一段 WORD wShowWindow; //用于设定如果子应用程序初次调用的ShowWindow 将SW_*作为nCmdShow 参数传递时,该应用程序的第一个重叠窗口应该如何出现。本成员可以是通常用于ShowWindow 函数的任何一个SW_*标识符,除了SW_SHOWDEFAULT. WORD cbReserved2; //保留。必须被初始化为0 PBYTE lpReserved2; //保留。必须被初始化为NULL HANDLE hStdInput; //用于设定供控制台输入和输出用的缓存的句柄。按照默认设置,hStdInput 用于标识键盘缓存,hStdOutput 和hStdError用于标识控制台窗口的缓存 HANDLE hStdOutput; HANDLE hStdError; } STARTUPINFO, *LPSTARTUPINFO;
dwFlag参数说明:STARTF_USESIZE //使用dwXSize 和dwYSize 成员 STARTF_USESHOWWINDOW //使用wShowWindow 成员 STARTF_USEPOSITION //使用dwX 和dwY 成员 STARTF_USECOUNTCHARS //使用dwXCountChars 和dwYCount Chars 成员 STARTF_USEFILLATTRIBUTE //使用dwFillAttribute 成员 STARTF_USESTDHANDLES //使用hStdInput 、hStdOutput 和hStdError 成员 STARTF_RUN_FULLSCREEN //强制在x86 计算机上运行的控制台应用程序以全屏幕方式启动运行PROCESS_INFORMATION结构返回有关新进程及其主线程的信息RMATION
typedef struct _PROCESS_INFORMATION { HANDLE hProcess; // 存放每个对象的与进程相关的句柄 HANDLE hThread; // 返回的线程句柄 DWORD dwProcessId; // 用来存放进程ID号 DWORD dwThreadId; // 用来存放线程ID号} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFO
//************************************************************************// 函数名称: CreateProcess_CreateProcess// 访问权限: public // 创建日期: 2017/06/04// 创 建 人: // 函数说明: CreateProcess()函数// 返 回 值: bool//************************************************************************bool CreateProcess_CreateProcess() { PROCESS_INFORMATION pi; //进程信息 STARTUPINFO si; //进程启动信息 memset(&si, 0, sizeof(STARTUPINFO)); si.cb = sizeof(si); si.wShowWindow = SW_SHOW; si.dwFlags = STARTF_USESHOWWINDOW; ::CreateProcess(_T("C:\\Windows\\winsxs\\x86_microsoft-windows-calc_31bf3856ad364e35_6.1.7601.17514_none_abc56b2678fe1108\\calc.exe"), NULL, NULL, false, NULL, NULL, NULL, NULL, &si, &pi); return true;}