1,221
社区成员
发帖
与我相关
我的任务
分享
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
AnsiString Path;
Path.SetLength(256);
Path.SetLength(GetSystemDirectory(Path.c_str(),Path.Length()));
ShellExecute(this->Handle,"open","Calc.exe",NULL,Path.c_str(),SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString FileName;
FileName.SetLength(256);
FileName.SetLength(GetSystemDirectory(FileName.c_str(),
FileName.Length()));
FileName = FileName + "\\Calc.exe";
LPSTARTUPINFO StartupInfo = new STARTUPINFO;
SECURITY_ATTRIBUTES *psap = new SECURITY_ATTRIBUTES;
psap->lpSecurityDescriptor = NULL;
psap->bInheritHandle = true;
psap->nLength = sizeof(psap);
SECURITY_ATTRIBUTES *psat = new SECURITY_ATTRIBUTES;
psat->lpSecurityDescriptor = NULL;
psat->bInheritHandle = true;
psat->nLength = sizeof(psat);
LPPROCESS_INFORMATION newProcess = new PROCESS_INFORMATION;
int res = CreateProcess(FileName.c_str(),NULL,psap,psat,true,
CREATE_SEPARATE_WOW_VDM | DETACHED_PROCESS | NORMAL_PRIORITY_CLASS,
NULL,NULL,StartupInfo,newProcess);
int i = GetLastError();
ShowMessage(IntToStr(res)+" "+IntToStr(i));
}
//---------------------------------------------------------------------------
char szPath[MAX_PATH] = { 0 };
::GetSystemDirectory(szPath, MAX_PATH);
AnsiString FileName = AnsiString().sprintf("%s\\Calc.exe", szPath);
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(STARTUPINFO);
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));
SECURITY_ATTRIBUTES psap;
psap.lpSecurityDescriptor = NULL;
psap.bInheritHandle = true;
psap.nLength = sizeof(psap);
SECURITY_ATTRIBUTES psat;
psat.lpSecurityDescriptor = NULL;
psat.bInheritHandle = true;
psat.nLength = sizeof(psat);
BOOL bRet = ::CreateProcess(
FileName.c_str(),
NULL,
&psap,
&psat,
true,
CREATE_SEPARATE_WOW_VDM | DETACHED_PROCESS | NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&si,
&pi);
DWORD dwLastError = ::GetLastError();
ShowMessage(AnsiString().sprintf("CreateProcess执行%s GetLastError: %d",
bRet? "成功.": "失败!", dwLastError));
char szPath[MAX_PATH] = { 0 };
::GetSystemDirectory(szPath, MAX_PATH);
AnsiString FileName = AnsiString().sprintf("%s\\Calc.exe", szPath);
...