std::string GetCmdInfo(const char * pszCmd)
{
//创建匿名管道
SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE};
HANDLE hRead, hWrite;
if (!CreatePipe(&hRead, &hWrite, &sa, 0))
{
return "";
}
//设置命令行进程启动信息(以隐藏方式启动命令并定位其输出到hWrite)
STARTUPINFO si = {sizeof(STARTUPINFO)};
GetStartupInfo(&si);
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
si.hStdError = hWrite;
si.hStdOutput = hWrite;
//启动命令行
PROCESS_INFORMATION pi;
if (!CreateProcess(NULL, (char *)pszCmd, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))
{
return "";
}
//立即关闭hWrite
CloseHandle(hWrite);
//读取命令行返回值
std::string strRet;
char buff[1024] = {0};
DWORD dwRead = 0;
while (ReadFile(hRead, buff, 1024, &dwRead, NULL))
{
strRet.append(buff, dwRead);
}
CloseHandle(hRead);
return strRet;
}

本文介绍了一种利用匿名管道在C++中执行命令并捕获其输出的方法,通过创建管道、设置命令行进程启动信息、启动命令行、读取命令输出并最终返回输出字符串的过程实现。
1927

被折叠的 条评论
为什么被折叠?



