DanYeL17 Posted February 23, 2023 Report Posted February 23, 2023 Salutare Am si eu nevoie sa rulez un terminal intr o aplicatie de tip Form. Pentru a intelege mai usoara idee, o sa fac o mica schema. As vrea : Un exe ( acel exe as fie full screen, inclusiv sa acopere bara windows, asta am rezolvat cu Call CenterToScreen() Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None Me.WindowState = FormWindowState.Maximized Form2.Visible = True) In acel exe sa existe doar un buton de exit undeva sus iar in partea de mijloc sa arate cam asa: In spatele cmd-ului fiind aplicatia form, iar in fata cmd-ul. Se poate implementa direct acel cmd in form? exista vreo modalitate de "crop" a form-ului in asa fel sa pot utiliza cmd ul, dar sa fie 'lock' in acel form, eventual cmd ul sa nu aiba acele optiuni de minimize, close, fullscreen. Sau aveti alta idee? Exemplul cu cmd ul este doar pt a intelege mai bine ce vreau sa spun, in esenta am nevoie sa rulez un exe intr un form, dar sa se vada doar o parte din acel exe... Quote
Active Members MrGrj Posted February 23, 2023 Active Members Report Posted February 23, 2023 using System; using System.Diagnostics; using System.IO; using System.Windows.Forms; namespace MyNamespace { public partial class MyForm : Form { private Process cmdProcess; public MyForm() { InitializeComponent(); InitializeCmd(); } private void InitializeCmd() { cmdProcess = new Process(); cmdProcess.StartInfo.FileName = "cmd.exe"; cmdProcess.StartInfo.CreateNoWindow = true; cmdProcess.StartInfo.UseShellExecute = false; cmdProcess.StartInfo.RedirectStandardInput = true; cmdProcess.StartInfo.RedirectStandardOutput = true; cmdProcess.StartInfo.RedirectStandardError = true; // ascunde bara de titlu si butoanele cmdProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; cmdProcess.Start(); StreamWriter cmdStreamWriter = cmdProcess.StandardInput; StreamReader cmdStreamReader = cmdProcess.StandardOutput; StreamReader cmdErrorReader = cmdProcess.StandardError; // adaugă controlul la form TextBox cmdControl = new TextBox(); cmdControl.Multiline = true; cmdControl.Dock = DockStyle.Fill; cmdControl.ScrollBars = ScrollBars.Vertical; cmdControl.Font = new System.Drawing.Font("Courier New", 10); Controls.Add(cmdControl); // afișează output-ul din terminal în control cmdStreamReader.BaseStream.BeginRead(new byte[1], 0, 0, null, null); cmdStreamReader.DataReceived += (s, e) => { if (!string.IsNullOrEmpty(e.Data)) { cmdControl.Invoke(new Action(() => { cmdControl.AppendText(e.Data + Environment.NewLine); })); } }; // citește input de la utilizator și trimite la terminal cmdControl.KeyDown += (s, e) => { if (e.KeyCode == Keys.Enter) { cmdStreamWriter.WriteLine(cmdControl.Text); cmdControl.Clear(); } }; // afișează erorile în consolă cmdErrorReader.BaseStream.BeginRead(new byte[1], 0, 0, null, null); cmdErrorReader.DataReceived += (s, e) => { if (!string.IsNullOrEmpty(e.Data)) { Debug.WriteLine(e.Data); } }; } private void MyForm_FormClosing(object sender, FormClosingEventArgs e) { cmdProcess?.Kill(); } } } 1 1 Quote