Output eines Konsolenprogramm in eine StringList umleiten.



  • Hallo!

    Ich möchte ein Konsolenprogramm ausführen und dessen Output in eine StringList schreiben. Dabei soll aber möglichst kein Konsolenfenster zu sehen sein.
    Wie mach ich das?



  • Such mal hier und im WinAPI-Forum nach 'pipes'.



  • Das mit den Pipes versteh ich net so ganz.

    Ich hab folgendes versucht, aber im Memo-Feld stehen nachher nur wirre Zeichen:

    HANDLE hChildStdoutRd, hChildStdoutWr, hChildStdoutRdDup, hInputFile, hSaveStdout;
       SECURITY_ATTRIBUTES saAttr;
       BOOL fSuccess;
    
       saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
       saAttr.bInheritHandle = TRUE;
       saAttr.lpSecurityDescriptor = NULL; 
    
       hSaveStdout = GetStdHandle(STD_OUTPUT_HANDLE);
    
       CreatePipe(&hChildStdoutRd, &hChildStdoutWr, &saAttr, 0);
    
       SetStdHandle(STD_OUTPUT_HANDLE, hChildStdoutWr);
    
        DuplicateHandle(GetCurrentProcess(), hChildStdoutRd,
            GetCurrentProcess(), &hChildStdoutRdDup , 0,
            FALSE,
            DUPLICATE_SAME_ACCESS);
        CloseHandle(hChildStdoutRd);
    
       PROCESS_INFORMATION piProcInfo;
       STARTUPINFO siStartInfo;
    
       ZeroMemory( &piProcInfo, sizeof(PROCESS_INFORMATION) );
    
       ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) );
       siStartInfo.cb = sizeof(STARTUPINFO);
    
       CreateProcess(NULL,
          "cdrecord -scanbus", // command line
          NULL,          // process security attributes
          NULL,          // primary thread security attributes
          TRUE,          // handles are inherited
          0,             // creation flags
          NULL,          // use parent's environment
          NULL,          // use parent's current directory
          &siStartInfo,  // STARTUPINFO pointer
          &piProcInfo);  // receives PROCESS_INFORMATION
    
          CloseHandle(piProcInfo.hProcess);
          CloseHandle(piProcInfo.hThread);
    
       SetStdHandle(STD_OUTPUT_HANDLE, hSaveStdout);
    
       DWORD dwRead;
       CHAR chBuf[BUFSIZE];
    
       CloseHandle(hChildStdoutWr);
    
       for (;;)
       {
          if( !ReadFile( hChildStdoutRdDup, chBuf, BUFSIZE, &dwRead,
             NULL) || dwRead == 0) break;
       }
       Memo2->Lines->Add(String(chBuf));
    

    Kann mir jemand helfen und mir zeigen wie richtig geht?



  • *push*



  • *PUSH*

    Kennt sich hier keiner damit aus?



  • *_P_U_S_H_*

    Hallo? Ich weiß, dass sich hier ein paar Leute damit auskennen. Warum antwortet ihr mir nicht?



  • *-P--U--S--H-_*

    Spreche ich irgendwie Chinesisch, oder warum antwortet mir keiner?



  • Hi!
    Hmmm event. sei dir damit geholfen:
    http://www.activevb.de/tipps/vb6tipps/tipp0272.html
    z.B. Sind die Parameter von CreateProcess nicht mit deinen identisch.
    mfg olli


Anmelden zum Antworten