15,979
社区成员
发帖
与我相关
我的任务
分享
// by creating process ***********************************
BOOL OpenExe(char *path,BOOL bWait)
{
STARTUPINFO sinfo;
PROCESS_INFORMATION pinfo;
memset (&sinfo,0,sizeof(STARTUPINFO));
sinfo.cb=sizeof(STARTUPINFO);
sinfo.dwFlags|=STARTF_USESHOWWINDOW;
sinfo.wShowWindow=SW_SHOWNORMAL;//SW_SHOW;// SW_SHOWDEFAULT;
//BOOL fsuccess=0;
BOOL fsuccess=CreateProcess(NULL,//lpApplicationName
path, //lpCommanderLine
NULL, //lpProcessAttributes
NULL, //lpThreadAttributes
FALSE, //bInheritHandles
NORMAL_PRIORITY_CLASS,//dwCreationFlags
NULL, //lpEnvironment
NULL, //lpCurrentDirectory
&sinfo, //lpStartupInfo
&pinfo); //lpProcessInformation
// wait for NotePad finishes
if(fsuccess)
{
HANDLE hProcess=pinfo.hProcess;
CloseHandle(pinfo.hThread);// close thread at once
if (bWait)
{
if (WaitForSingleObject(hProcess,INFINITE)!=WAIT_FAILED)
{
DWORD dwExitCode;
GetExitCodeProcess(hProcess,&dwExitCode);
if (dwExitCode==STILL_ACTIVE) AfxMessageBox("EXE STill ALIVE");
}
}
CloseHandle(pinfo.hProcess);
}
return(fsuccess);
}
注意:
if (dwExitCode==STILL_ACTIVE) AfxMessageBox("EXE STill ALIVE");
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = "c:\\MyProgram.exe";
ShExecInfo.lpParameters = "";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
或:
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo; //This is an [in] parameter
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo ; //Only compulsory field
if(CreateProcess("c:\\winnt\\notepad.exe", NULL,
NULL,NULL,FALSE,0,NULL,
NULL,&StartupInfo,&ProcessInfo))
{
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
}
else
{
MessageBox("The process could not be started...");
}