不多说直接上源码:

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命令行窗口中的数据了
}

更多推荐