不多说直接上源码:
void ChangedVideoSize()
{
wstring szStartApp = L"ffmpeg -y -i c:\2.mp4 -s 1280*720 video2_1280x720.mp4";
SECURITY_ATTRIBUTES sa;
HANDLE hRead, hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL; //使用系统默认的安全描述符
sa.bInheritHandle = TRUE; //创建的进程继承句柄
if (!CreatePipe(&hRead, &hWrite, &sa, 0)) //创建匿名管道
{
::MessageBoxA(NULL, "CreatePipe Failed!", "提示", MB_OK | MB_ICONWARNING);
return;
}
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;
if (!CreateProcess(NULL, (LPWSTR)szStartApp.c_str(), NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi)) //创建子进程
{
::MessageBoxA(NULL, "CreateProcess Failed!", "提示", MB_OK | MB_ICONWARNING);
return;
}
::CloseHandle(pi.hProcess);
::CloseHandle(hWrite); //关闭管道句柄
char buffer[4096] = { 0 };
DWORD bytesRead;
string temp;
while (true)
{
if (ReadFile(hRead, buffer, 4095, &bytesRead, NULL) == NULL) //读取管道
break;
temp += buffer;
temp += "\r\n";
}
CloseHandle(hRead);
//得到的temp就是cmd命令行窗口中的数据了
}