Jak pobrać wyniki działania programu z konsoli.

Odpowiedz Nowy wątek
2006-11-27 18:19
0

Witam.
Mam takie pytanie.
W jaki sposób można przekazać wyniki działania programu wyświetlone w konsoli do innego programu (np. aplikacji pisanej dla windows).
Chcę napisać nakładkę graficzną na program pisany pod konsole z tym że nie mam pojęcia jak komunikaty wyświetlane w konsoli przekazać do mojej nakładki aby wyświetlić je w jakimś oknie.
Pierwszy sposób (niezbyt elegancki) to zastosować „dosowy” operator „>>plik.txt” a następnie czytać informacje z pliku. Jednak nie za bardzo chce to działać (tworzy się pusty plik tekstowy, poza tym średnio zadowala mnie takie rozwiązanie). Ma ktoś jakiś inny pomysł, idee, może gotowe rozwiązanie ? BARDZO proszę o pomoc.
Z góry dziękuje!

Pozostało 580 znaków

2006-11-27 21:58
0

popen


Pozostało 580 znaków

2006-11-28 11:50
0

ewentualnie poszukaj pod haslem frontend ;)


Pozostało 580 znaków

2006-11-28 17:09
0

Możesz wywołać polecenie z końcówką ">> plik.txt". Wtedy wynik zapisze Ci się do pliku i możesz to odczytać z pliku.


Pozostało 580 znaków

2006-11-28 18:16
0
konrad.g napisał(a)

Możesz wywołać polecenie z końcówką ">> plik.txt". Wtedy wynik zapisze Ci się do pliku i możesz to odczytać z pliku.

tylko ze czasem programy wyzucaja dane na kilka strumieni :P stdout, stderr :P


Pozostało 580 znaków

2006-11-28 22:21
0
cepa napisał(a)

popen

Mógłbyś zapodać jakąś stronę chociaż z przykładami tworzenia potoków pod Windozą. Na google prawie sam Linux po wpisaniu „potoki”. Ja jestem w tym temacie całkowicie zielony stąd prośba o info na temat lokalizacji jakiś materiałów w necie na ten temat.

Pozostało 580 znaków

2006-11-29 11:22
0

popen zadziala tylko w aplikacji konsolowej.

#defie  COMMANDLINE "cmd.exe /c dir c: & dir c:\\windows & echo mam dosc"
#define CURRENTDIR  NULL //"c:\\"

BOOL pipe_process()
{
    #define bufSize 1024
    HANDLE readPipe, writePipe;
    SECURITY_ATTRIBUTES security;
    STARTUPINFO         info;
    PROCESS_INFORMATION process;

    char buf[bufSize];
    DWORD bytesRead;

    security.nLength = sizeof(security);
    security.lpSecurityDescriptor = NULL;
    security.bInheritHandle = true;

    CreatePipe(&readPipe, &writePipe, &security, 0));

    memset(&info, 0, sizeof(info));
    info.cb = sizeof(info);
    info.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
    info.wShowWindow = SW_HIDE;
    info.hStdOutput = writePipe;
    info.hStdError = writePipe;

    BOOL ok = CreateProcess(NULL, COMMANDLINE, NULL, NULL, TRUE, 0, NULL, CURRENTDIR, &info, &process);
    CloseHandle(writePipe);
    if (ok)
    {
        while (ReadFile(readPipe, &buf, bufSize-1, &bytesRead, NULL) & (bytesRead))
        {
            buf[bytesRead] = 0;
            MessageBox(0, buf, "", 0);
        }
        CloseHandle(process.hProcess);
        CloseHandle(process.hThread);
    }
    CloseHandle(readPipe);

    return ok;
}

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0