使用DOS管道的程式碼片段

lin_zyang發表於2007-10-08
void CDosDirDlg::OnOK() 
{
    SECURITY_ATTRIBUTES sa;
    HANDLE hRead,hWrite;
    
    sa.nLength 
= sizeof(SECURITY_ATTRIBUTES);
    sa.lpSecurityDescriptor 
= NULL;
    sa.bInheritHandle 
= TRUE;
    
if (!CreatePipe(&hRead,&hWrite,&sa,0)) {
        MessageBox(
"Error On CreatePipe()");
        
return;
    }

    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;
    
if (!CreateProcess(NULL,"c:/windows/system32/cmd.exe"
        ,NULL,NULL,TRUE,NULL,NULL,NULL,
&si,&pi)) {
        MessageBox(
"Error on CreateProcess()");
        
return;
    }

    CloseHandle(hWrite);
    
    
char buffer[4096= {0};
    DWORD bytesRead;
    
while (true{
        
if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
            
break;
        m_Edit1 
+= buffer;
        UpdateData(
false);
        Sleep(
200);
    }
 
}

 

相關文章