Pokud ta aplikace běží v textovém terminálu, šlo by ji pustit v tom terminálu z C# a odkamtud klidně i celou ovládat.
Přesně tak to je (aplikace běží v textovém terminálu). Spustit cmd.exe, resp. DOS aplikaci bych z C# uměl, ale jak přistupovat neinvazivě k textu na obrazovce? Lze se pak dostat k paměti s framebufferem?
Mám udělaný prototyp, který detekuje spuštěnou aplikaci, hodí ji do popředí, vyvolá kontextové menu okna a provede výběr celé obrazovky s následným nakopírováním do klipboardu. Je to velmi nešikovné (přemaže obsah klipbooardu, přepíná do popředí okno, závislost na verzi win), nedá se to spouštět periodicky, takže v praxi nepoužitelné.
Kdyby to někoho zajímalo, tak ve zkratce (bez ošetření chyb):
IntPtr myApp = FindWindow("ConsoleWindowClass", "C:\\WINDOWS\\system32\\cmd.exe");
if (myApp == IntPtr.Zero) return;
SetForegroundWindow(myApp);
SendKeys.SendWait("% "); // ALT + space
SendKeys.SendWait("a");
SendKeys.SendWait("a");
SendKeys.SendWait("{ENTER}");
// obsah textu DOS aplikace je v klipboardu
Nápad s cygwinem není špatný, ale jedná se o DOS aplikaci, které je náchylná na nastavení prostředí (sítová a lokální tiskárna), takže mám obavy z běhu mimo stabilní cmd.exe.