//运行一个dos命令,并返回执行结果
std::basic_string<TCHAR> shellexec(const TCHAR* cmd)
{
HANDLE hRead = NULL;
HANDLE hWrite = NULL;
SECURITY_ATTRIBUTES sa = {0};
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
TCHAR buffer[4096] = {0};
DWORD dwRead = 0;
std::basic_string<TCHAR> str = TEXT("cmd /c ")
str += cmd;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead, &hWrite, &sa, 0)){
return TEXT("Error On CreatePipe()");
}
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
if (!CreateProcess(NULL,
const_cast<PTCHAR>(str.c_str()),
NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi)){
return TEXT("Error on CreateProcess()");
}
CloseHandle(hWrite);
str.clear();
while(ReadFile(hRead, buffer, 4095, &dwRead, NULL)){
str += std::basic_string<TCHAR>(buffer, dwRead);// + TEXT("<CR>");
}
CloseHandle(hRead);
return str;
}