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;
}