我想用mfc调用系统的ftp.exe并输入各种命令,返回命令执行的结果。 听说用管道方式可以实现,求例子, 谢谢!

解决方案 »

  1.   

    http://blog.csdn.net/wuna66320/archive/2006/09/04/1175802.aspx
      

  2.   


    UINT __cdecl ThreadProc(LPVOID lParam)
    {
    HWND hWnd = (HWND)lParam;
    ASSERT(hWnd); TCHAR szApp[MAX_PATH] = _T("C:\\Windows\\System32\\cmd.exe /c ping www.google.com");
    HANDLE hRead = NULL;
    HANDLE hWrite = NULL;
    SECURITY_ATTRIBUTES sa = {0};
    sa.nLength = sizeof(sa);
    sa.lpSecurityDescriptor = NULL;
    sa.bInheritHandle = TRUE; if(!CreatePipe(&hRead, &hWrite, &sa, 0))
    {
    AfxMessageBox(_T("CreatePipe failed."));
    return -1;
    } STARTUPINFO si = {sizeof(si)};
    PROCESS_INFORMATION pi = {0};
    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
    si.hStdInput = hRead;
    si.hStdOutput = hWrite;
    si.hStdError = hWrite; if(!CreateProcess(NULL, szApp, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))
    {
    CloseHandle(hWrite);
    CloseHandle(hRead);
    return -1;
    } CloseHandle(pi.hThread);
    CloseHandle(pi.hProcess);
    CloseHandle(hWrite);#define MAX_BUFFER 1024
    char szBuf[MAX_BUFFER] = {0};
    DWORD dwRead = 0;
    CString strText(_T("")); while(ReadFile(hRead, szBuf, MAX_BUFFER-1, &dwRead, NULL))
    {
    strText += szBuf;
    memset(szBuf, 0, sizeof(szBuf));
    } CloseHandle(hRead); AfxMessageBox(strText);
    return 0;
    }http://blog.csdn.net/VisualEleven/archive/2011/04/26/6365366.aspx