Jak pobrać wyniki działania programu z konsoli.

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!

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;
}

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