Tak sobie obserwuję niektóre polecenia w konsoli windows i widzę rzecz w zasadzie oczywistą. Jeśli polecenie wywala x stron tekstu, to często robi przerwę co 25/50 lini:
c:\> if /?
długi
długi tekst
...
Aby kontynuować, naciśnij dowolny klawisz . . .
reszta długiego
długiego tekstu
...
Aby kontynuować, naciśnij dowolny klawisz . . .
itd
A jeśli wynik polecenia przekierujemy do pliku, to rzecz jasna, nikt o klawisz nie prosi:
c:\> if /? > out.txt
i mamy w pliku natychmiast wszystkie 100,200, x-set lini.
Jak to rozpoznać, że w programie dając na cout piszemy do pliku?
A może nawet jak rozpoznać, że przekierowano nas do null - w takim wypadku może mój program na przykład powstrzyma się od pisania, bo i tak to leci w powietrze...
Czasem niektóre komunikaty nie dają się przekierować - są pisane na ekran bez względu na przekierowania. Jak za pomocą rozsądnych metod (mile widziane WinAPI) pisać bezpośrednio do konsoli, a nie na stdout?
I na koniec rzecz, która mi się marzy. Załóżmy, że mam programik jakiś. Jeśli wywołany zostanie z konsoli poleceniem, to wypisze tekst na konsolę. Jeśli zostanie uruchomiony podwójnym klikiem, to zamiast pisać na konsolę, wyświetli np MessageBox. Inaczej: czy da się napisać jeden "program.exe", który zachowuje się jak konsolowy albo GUI zależnie od kontekstu wywołania? Czy to w sumie nie sprowadzałoby się do tego, żeby sprawdzić, co programik uruchomiło: proces "cmd.exe" czy "explorer.exe"? Czy windows programowi podaje proces "rodzica" na tyle fajnie, żeby się dało dobrać do pliku .exe rodzica i sprawdzić we właściwościach obrazu czy jest skompilowany jako Win32 GUI, czy jako Win32 Console?