VC实现CMD回显
string runCmd(string strCommend) { // //通过管道技术回显cmd输出信息 // SECURITY_ATTRIBUTES sa; HANDLE hRead,hWrite; string strOutput; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; //使用系统默认的安全描述符 sa.bInheritHandle = TRUE; //创建的进程继承句柄 if (!CreatePipe(&hRead,&hWrite,&sa,0)) //创建匿名管道 { MessageBox(NULL,"CreatePipe Failed!","提示",MB_OK | MB_ICONWARNING); return strOutput; } 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[500]; sprintf_s(cmdline,"cmd /C %s",strCommend.c_str()); if (!CreateProcess(NULL,cmdline,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)) //创建子进程 { MessageBox(NULL,"CreateProcess Failed!","提示",MB_OK | MB_ICONWARNING); return strOutput; } CloseHandle(hWrite); //关闭管道句柄 char buffer[4096] = {0}; DWORD bytesRead; while (true) { if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL) //读取管道 break; strOutput.append(buffer); Sleep(100); } CloseHandle(hRead); return strOutput; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 判断一个数组中的值是否包含在另一个数组中
- 下一篇: MFC 执行CMD命令 利用管道技术读取输出内容