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!
0
0
popen
0
ewentualnie poszukaj pod haslem frontend ;)
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.
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
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.
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;
}