日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 执行cmd命令 并获取输出

發(fā)布時間:2023/11/30 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 执行cmd命令 并获取输出 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這是參考別人的 ,具體來源忘了,唉,等想起來一定補上出處

頭文件
PipeCmd.h

#ifndef _PIPE_CMD_H_ #define _PIPE_CMD_H_#include <Windows.h>// 執(zhí)行 cmd 命令, 并獲取執(zhí)行結果數(shù)據(jù) BOOL PipeCmd(char *pszCmd, char *pszResultBuffer, DWORD dwResultBufferSize);#endif

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命令 并获取输出的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。