18,363
社区成员




SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = _T("open");
ShExecInfo.lpFile = strFilePath;
ShExecInfo.lpParameters = strPara;
ShExecInfo.nShow = SW_HIDE;
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
BOOL ExecuteCmd(CString strCmd, bool bDisplay)
{
SECURITY_ATTRIBUTES sa;
HANDLE hRead, hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox("CreatePipe Failed!", "错误", MB_OK | MB_ICONHAND);
return FALSE;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
char* cmdline = strCmd.GetBuffer(strCmd.GetLength() + 1);
if (!CreateProcess(NULL, cmdline, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))
{
MessageBox("CreateProcess Failed!", "错误", MB_OK | MB_ICONHAND);
return FALSE;
}
CloseHandle(hWrite);
if (bDisplay)
{
char buffer[4096] = {0};
DWORD bytesRead;
while (true)
{
RtlZeroMemory(buffer, 1024);
if(ReadFile(hRead, buffer, 4095, &bytesRead, NULL) == NULL)
{
break;
}
::SendMessage(m_ctrlEditInfo, EM_SETSEL, -1, 0);
::SendMessage(m_ctrlEditInfo, EM_REPLACESEL, false, (long)buffer);
}
}
CloseHandle(hRead);
return TRUE;
}