比如我的控制台程序调用dir.exe,并把结果在当前窗口进行显示呢?

解决方案 »

  1.   

    使用管道即可
    http://www.cnblogs.com/ahuo/archive/2007/09/03/879961.html
      

  2.   

    使用管道
    http://www.cnblogs.com/ahuo/archive/2007/09/03/879961.html
      

  3.   


    #include <stdio.h>
    #include "windows.h"
    DWORD DoMyCmd(char *cmdline,char *msg);
    int main()

    char buff[MAX_PATH];
    char msg[4096];
    DWORD nLen;
    while(true)
    {
    memset(buff,0,MAX_PATH);
    gets(buff);
    nLen = DoMyCmd(buff,msg);
    *(msg+nLen) = '\0';
    printf(msg);
    }

    return 0; 
    } DWORD DoMyCmd(char *cmdline,char *msg)
    {
    SECURITY_ATTRIBUTES sa;
        HANDLE hRead,hWrite;

        sa.nLength = sizeof(SECURITY_ATTRIBUTES);
        sa.lpSecurityDescriptor = NULL;
        sa.bInheritHandle = TRUE;
        if (!CreatePipe(&hRead,&hWrite,&sa,0))
        {
    printf("Error On CreatePipe()");
    return 0;
        }
        STARTUPINFO si;
        PROCESS_INFORMATION pi;
        si.cb = sizeof(STARTUPINFO);
        GetStartupInfo(&si);
        si.hStdError = hWrite;
        si.hStdOutput = hWrite;
        si.wShowWindow = SW_HIDE;
        si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;

    char stmp[MAX_PATH] = {0};
    GetSystemDirectory(stmp,MAX_PATH);
    strcat(stmp,"\\cmd.exe /c ");
    strcat(stmp,cmdline);
        if (!CreateProcess(NULL,stmp,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
        {
            printf("Error on CreateProcess()");
            return 0;
        }
        CloseHandle(hWrite) ;
        DWORD bytesRead;
    DWORD nLen = 0;
        while (true)
        {
    char buffer[100] = {0};
            if (ReadFile(hRead,buffer,100,&bytesRead,NULL) == NULL)
    {
    memcpy(msg+nLen,buffer,bytesRead);
    nLen+=bytesRead;
    CloseHandle(hRead);
                break;
    }
    memcpy(msg+nLen,buffer,bytesRead);
    nLen+=bytesRead;
    if(nLen>(4096-101) ) 
    {
    CloseHandle(hRead);
    break;
    }
        }
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
    return nLen;
    }