运行一个dos命令,并返回执行结果

136 阅读1分钟


//运行一个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;
}