Lansați aplicații consolă și intercepta fluxul de intrare

Să presupunem că aveți nevoie pentru a rula o aplicație consolă din fereastra de aplicații și urmăriți fluxul de ieșire. Puteți salva textul mesajului în fișierul jurnal sau textul de afișare într-o fereastră într-o casetă de text multilinie, de exemplu, în TRichEdit. În plus, puteți trimite informații la cerere, în cazul în care este ceva solicitat. Să vedem cum se face?

Lansarea aplicațiilor consolă sau orice altă aplicație în Delphi este foarte simplu, prin utilizarea funcției CreateProcess. Harder este cazul, în cazul în care aveți nevoie pentru a rula aplicația consolă și să facă interceptarea fluxului I / O astfel. Pentru a face acest lucru, aveți nevoie pentru a crea trei canale, două pentru interceptare fluxuri de ieșire (unul pentru erori și unul pentru orice altceva), și unul pentru fluxul de intrare, și apoi începe procesul, trecându-l aceste canale. În acest caz, puteți citi informațiile de care dă aplicația consola și gestiona.

Cum de a scrie codul de la zero pot fi găsite pe internet (de exemplu, pe acest forum), dar aici mă voi concentra pe componenta TPipeConsole. care este proiectat tocmai pentru a intercepta firele I / O în Delphi. Și vă permite să-l faci confortabil.

O parte componentă a unității Pipes.pas. despre care am scris în „Comunicarea între procesele de articol din Delphi Xe3». Sunt scrise, cum cel mai bine pentru a instala componentele. puteți descărca versiunea mea corectată aici:

(Versiunea veche. Este mai bine să utilizați o versiune de Pipes.pas (Win32 si Win64), a se vedea. De mai jos). Clasele de implementare yunite TPipeServer (Pipe-server), TPipeClient (Pipe-client) și TPipeConsole (clasa pentru a rula aplicatii consola, de management și de ieșire de interceptare flux). Funcționează doar pe Win32. Unitatea cu revizuirile mele de a lucra cu Delphi la versiunea Xe3. Funcția TPipeConsole.Execute cu corecturi mele. Sursa aici.