C++ 执行cmd命令 并获取输出
生活随笔
收集整理的這篇文章主要介紹了
C++ 执行cmd命令 并获取输出
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
這是參考別人的 ,具體來源忘了,唉,等想起來一定補上出處
頭文件
PipeCmd.h
cpp文件
#include "stdafx.h" #include "PipeCmd.h"void ShowError(char *pszText) {char szErr[MAX_PATH] = {0};::wsprintf(szErr, "%s Error[%d]\n", pszText, ::GetLastError());::MessageBox(NULL, szErr, "ERROR", MB_OK); }// 執(zhí)行 cmd 命令, 并獲取執(zhí)行結果數(shù)據(jù) BOOL PipeCmd(char *pszCmd, char *pszResultBuffer, DWORD dwResultBufferSize) {HANDLE hReadPipe = NULL;HANDLE hWritePipe = NULL;SECURITY_ATTRIBUTES securityAttributes = {0};BOOL bRet = FALSE;STARTUPINFO si = {0};PROCESS_INFORMATION pi = {0};// 設定管道的安全屬性securityAttributes.bInheritHandle = TRUE;securityAttributes.nLength = sizeof(securityAttributes);securityAttributes.lpSecurityDescriptor = NULL;// 創(chuàng)建匿名管道bRet = ::CreatePipe(&hReadPipe, &hWritePipe, &securityAttributes, 0);if (FALSE == bRet){ShowError("CreatePipe");return FALSE;}// 設置新進程參數(shù)si.cb = sizeof(si);si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;si.wShowWindow = SW_HIDE;si.hStdError = hWritePipe;si.hStdOutput = hWritePipe;// 創(chuàng)建新進程執(zhí)行命令, 將執(zhí)行結果寫入匿名管道中bRet = ::CreateProcess(NULL, pszCmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);if (FALSE == bRet){ShowError("CreateProcess");}// 等待命令執(zhí)行結束::WaitForSingleObject(pi.hThread, INFINITE);::WaitForSingleObject(pi.hProcess, INFINITE);// 從匿名管道中讀取結果到輸出緩沖區(qū)::RtlZeroMemory(pszResultBuffer, dwResultBufferSize);::ReadFile(hReadPipe, pszResultBuffer, dwResultBufferSize, NULL, NULL);// 關閉句柄, 釋放內存::CloseHandle(pi.hThread);::CloseHandle(pi.hProcess);::CloseHandle(hWritePipe);::CloseHandle(hReadPipe);return TRUE; }使用:
string getVideoInfoParam = appPath.toStdString() + "\\ffmpeg.exe -i \"" + filePath + "\"" ; // getVideoInfoParam 是要執(zhí)行的命令 // szResultBuffer 命令輸出結果存儲在這里 char szResultBuffer[2560] = { 0 }; DWORD dwResultBufferSize = 2560; string videoInfoStr; // 執(zhí)行 cmd 命令, 并獲取執(zhí)行結果數(shù)據(jù) if (FALSE == PipeCmd(const_cast<char *>(getVideoInfoParam.c_str()), szResultBuffer, dwResultBufferSize)) {//videoInfoStr = szResultBuffer;//QMessageBox::information(NULL, QString::fromLocal8Bit("video info error"), QString::fromStdString(videoInfoStr), QMessageBox::Yes, QMessageBox::Yes); } else {videoInfoStr = szResultBuffer;//QMessageBox::information(NULL, QString::fromLocal8Bit("video info"), QString::fromStdString(videoInfoStr), QMessageBox::Yes, QMessageBox::Yes); }總結
以上是生活随笔為你收集整理的C++ 执行cmd命令 并获取输出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dnf鬼泣远古二装备如何取舍?
- 下一篇: C++实现utf8和gbk编码字符串互相