通过管道执行cmd命令
2015-09-14 17:10
197 查看
string ExeCmd(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_SHOW;//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;
}
{
//创建匿名管道
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_SHOW;//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;
}
相关文章推荐
- java解析xml的几种方式 SAX解析
- win8系统怎么获取文件权限 win8系统手动获取文件权限图文教程
- mysql修改默认root用户密码
- Mac OS X: 系统nvram启动参数
- 嵌入式中 volatile 用法
- Hadoop之—— CentOS Warning: $HADOOP_HOME is deprecated解
- [转]如何选择Html.RenderPartial和Html.RenderAction
- wxWidgets下显示下载进度条
- oracle、sqlserver及mysql数据库版本查看
- curl、fopen和file_get_contents区别
- 剑指Offer-第2章 面试需要的基础知识
- AFNetworking 上传文件
- echarts 根据实际数据改变仪表盘颜色
- tomcat结合nginx使用小结
- C++Primer第五版 4.11.1节练习
- 使用 Arduino 和 LM35 温度传感器监测温度
- 条件和循环(More Control Flow Tools)
- iBatis学习
- 智能家居--关于霉菌的危害(转载)
- iOS开发--touchID指纹识别