public override void AppendMessageFreeThreaded(string text)
        {
            ConEmuSession session = _terminal.RunningSession;

            if (session != null)
            {
                session.WriteOutputText(text);
            }
        }
        private static void KillProcess(ConEmuControl terminal)
        {
            ConEmuSession session = terminal.RunningSession;

            if (session != null)
            {
                session.SendControlCAsync();
            }
        }
        public override void Reset()
        {
            ConEmuSession session = _terminal.RunningSession;

            if (session != null)
            {
                session.CloseConsoleEmulator();
            }
        }
Example #4
0
        public override void KillProcess()
        {
            ConEmuSession session = _terminal.RunningSession;

            if (session != null)
            {
                session.SendControlCAsync();
            }
        }
Example #5
0
        private static Form CreatePingForm()
        {
            var form = new Form()
            {
                AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, Padding = new Padding(10), Text = "Ping Command"
            };

            FlowLayoutPanel stack;

            form.Controls.Add(stack = new FlowLayoutPanel()
            {
                Dock = DockStyle.Fill, AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, FlowDirection = FlowDirection.TopDown
            });

            stack.Controls.Add(new Label()
            {
                AutoSize = true, Dock = DockStyle.Top, Text = "Running the ping command.", Padding = new Padding(5)
            });
            Label labelWaitOrResult;

            stack.Controls.Add(labelWaitOrResult = new Label()
            {
                AutoSize = true, Dock = DockStyle.Top, Text = "Please wait…", BackColor = Color.Yellow, Padding = new Padding(5)
            });

            ConEmuControl conemu;
            var           sbText = new StringBuilder();

            stack.Controls.Add(conemu = new ConEmuControl()
            {
                AutoStartInfo = null, MinimumSize = new Size(800, 600), Dock = DockStyle.Top
            });
            ConEmuSession session = conemu.Start(new ConEmuStartInfo()
            {
                AnsiStreamChunkReceivedEventSink = (sender, args) => sbText.Append(args.GetMbcsText()),
                ConsoleProcessCommandLine        = "ping 8.8.8.8",
                LogLevel = ConEmuStartInfo.LogLevels.Basic
            });

            session.ConsoleProcessExited += delegate
            {
                Match match = Regex.Match(sbText.ToString(), @"\(.*\b(?<pc>\d+)%.*?\)", RegexOptions.Multiline);
                if (!match.Success)
                {
                    labelWaitOrResult.Text      = "Ping execution completed, failed to parse the result.";
                    labelWaitOrResult.BackColor = Color.PaleVioletRed;
                }
                else
                {
                    labelWaitOrResult.Text      = $"Ping execution completed, lost {match.Groups["pc"].Value} per cent of packets.";
                    labelWaitOrResult.BackColor = Color.Lime;
                }
            };
            session.ConsoleEmulatorClosed += delegate { form.Close(); };

            return(form);
        }
Example #6
0
        /// <summary>
        /// This method checks that the async-await compiler syntax is not prevented in netfx45+ projects due to the shim types present in the conemu assembly (https://github.com/Maximus5/conemu-inside/issues/20).
        /// </summary>
        private static async Task ShowMessageForChoiceAsync(ConEmuSession session)
        {
            if (session == null)
            {
                throw new ArgumentNullException(nameof(session));
            }
            ConsoleProcessExitedEventArgs exitargs = await session.WaitForConsoleProcessExitAsync();

            MessageBox.Show($"Your choice is {exitargs.ExitCode} (powered by wait-for-exit-async).");
        }
Example #7
0
        private void setupConEmu()
        {
            ConEmuStartInfo startInfo = new ConEmuStartInfo();

            startInfo.ConEmuExecutablePath      = @"C:\Program Files\ConEmu\ConEmu64.exe";
            startInfo.GreetingText              = $"ConEmu version [{FileVersionInfo.GetVersionInfo(_conEmuPath).ProductVersion}]";
            startInfo.GreetingText             += $"ngrok version [{FileVersionInfo.GetVersionInfo(_ngrokPath).ProductVersion}";
            startInfo.ConsoleProcessCommandLine = _ngrokPath + " start --none";
            _control = new ConEmuControl();
            _session = _control.Start(startInfo);
            pnlBottom.Controls.Add(_control);
            _control.Dock    = DockStyle.Fill;
            _control.Enabled = false;
        }
Example #8
0
        public PanelConsole(ConsoleSession session)
        {
            InitializeComponent();

            AutoSize = true;
            Text     = session.SessionName;
            //Resize += new System.EventHandler(TermPanel_Resize);

            Controls.Add(conemu = new ConEmuControl()
            {
                AutoStartInfo = null, Dock = DockStyle.Fill
            });
            con_session = conemu.Start(new ConEmuStartInfo()
            {
                ConsoleProcessCommandLine = session.CommandLine
            });
        }
Example #9
0
        private static Form RenderView(Form form)
        {
            form.Size = new Size(800, 600);

            ConEmuControl conemu;

            form.Controls.Add(conemu = new ConEmuControl()
            {
                Dock = DockStyle.Fill, MinimumSize = new Size(200, 200), IsStatusbarVisible = true
            });
            if (conemu.AutoStartInfo != null)
            {
                conemu.AutoStartInfo.SetEnv("one", "two");
                conemu.AutoStartInfo.SetEnv("geet", "huub");
                conemu.AutoStartInfo.GreetingText = "• Running \"cmd.exe\" as the default shell in the terminal. \n\n";
                //conemu.AutoStartInfo.GreetingText = "\"C:\\Program Files\\Git\\bin\\git.exe\" fetch --progress \"--all\" ";	// A test specimen with advanced quoting
                conemu.AutoStartInfo.IsEchoingConsoleCommandLine = true;
            }
            //conemu.AutoStartInfo = null;
            TextBox txt;

            form.Controls.Add(txt = new TextBox()
            {
                Text = "AnotherFocusableControl", AutoSize = true, Dock = DockStyle.Top
            });

            FlowLayoutPanel stack;

            form.Controls.Add(stack = new FlowLayoutPanel()
            {
                FlowDirection = FlowDirection.LeftToRight, Dock = DockStyle.Top, AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink
            });

            Button btn;

            stack.Controls.Add(btn = new Button()
            {
                Text = "Paste Command", AutoSize = true, Dock = DockStyle.Left
            });
            btn.Click += delegate { conemu.RunningSession?.WriteInputText("whois microsoft.com" + Environment.NewLine); };

            stack.Controls.Add(btn = new Button()
            {
                Text = "Write StdOut", AutoSize = true, Dock = DockStyle.Left
            });
            btn.Click += delegate { conemu.RunningSession?.WriteOutputText("\x001B7\x001B[90mEcho \"Hello world!\"\x001B[m\x001B8"); };

            stack.Controls.Add(btn = new Button()
            {
                Text = "Query HWND", AutoSize = true, Dock = DockStyle.Left
            });
            btn.Click += delegate { conemu.RunningSession?.BeginGuiMacro("GetInfo").WithParam("HWND").ExecuteAsync().ContinueWith(task => txt.Text = $"ConEmu HWND: {Regex.Replace(task.Result.Response, "\\s+", " ")}", TaskScheduler.FromCurrentSynchronizationContext()); };

            stack.Controls.Add(btn = new Button()
            {
                Text = "Query PID", AutoSize = true, Dock = DockStyle.Left
            });
            btn.Click += delegate { conemu.RunningSession?.BeginGuiMacro("GetInfo").WithParam("PID").ExecuteAsync().ContinueWith(task => txt.Text = $"ConEmu PID: {Regex.Replace(task.Result.Response, "\\s+", " ")}", TaskScheduler.FromCurrentSynchronizationContext()); };

            stack.Controls.Add(btn = new Button()
            {
                Text = "Kill Payload", AutoSize = true, Dock = DockStyle.Left
            });
            btn.Click += delegate { conemu.RunningSession?.KillConsoleProcessAsync(); };

            stack.Controls.Add(btn = new Button()
            {
                Text = "Ctrl+C", AutoSize = true, Dock = DockStyle.Left
            });
            btn.Click += delegate { conemu.RunningSession?.SendControlCAsync(); };

            CheckBox checkStatusBar;

            stack.Controls.Add(checkStatusBar = new CheckBox()
            {
                Text = "StatusBar", Checked = conemu.IsStatusbarVisible
            });
            checkStatusBar.CheckedChanged += delegate { conemu.IsStatusbarVisible = checkStatusBar.Checked; };

            TextBox txtOutput = null;

            stack.Controls.Add(btn = new Button()
            {
                Text = "&Ping", AutoSize = true, Dock = DockStyle.Left
            });
            btn.Click += delegate
            {
                if (conemu.IsConsoleEmulatorOpen)
                {
                    MessageBox.Show(form, "The console is busy right now.", "Ping", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }
                if (txtOutput == null)
                {
                    form.Controls.Add(txtOutput = new TextBox()
                    {
                        Multiline = true, Dock = DockStyle.Right, Width = 200
                    });
                }
                conemu.Start(new ConEmuStartInfo()
                {
                    ConsoleProcessCommandLine = "ping ya.ru", IsEchoingConsoleCommandLine = true, AnsiStreamChunkReceivedEventSink = (sender, args) => txtOutput.Text += args.GetMbcsText(), WhenConsoleProcessExits = WhenConsoleProcessExits.KeepConsoleEmulatorAndShowMessage, ConsoleProcessExitedEventSink = (sender, args) => txtOutput.Text += $"Exited with ERRORLEVEL {args.ExitCode}.", GreetingText = $"This will showcase getting the command output live in the backend.{Environment.NewLine}As the PING command runs, the textbox would duplicate its stdout in real time.{Environment.NewLine}{Environment.NewLine}"
                });
            };

            stack.Controls.Add(btn = new Button()
            {
                Text = "&Choice", AutoSize = true, Dock = DockStyle.Left
            });
            btn.Click += delegate
            {
                conemu.RunningSession?.CloseConsoleEmulator();
                DialogResult result = MessageBox.Show(form, "Keep terminal when payload exits?", "Choice", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                if (result == DialogResult.Cancel)
                {
                    return;
                }
                ConEmuSession session = conemu.Start(new ConEmuStartInfo()
                {
                    ConsoleProcessCommandLine = "choice", IsEchoingConsoleCommandLine = true, WhenConsoleProcessExits = result == DialogResult.Yes ? WhenConsoleProcessExits.KeepConsoleEmulatorAndShowMessage : WhenConsoleProcessExits.CloseConsoleEmulator, ConsoleProcessExitedEventSink = (sender, args) => MessageBox.Show($"Your choice is {args.ExitCode} (powered by startinfo event sink).")
                });
#pragma warning disable 4014
                ShowMessageForChoiceAsync(session);
#pragma warning restore 4014
            };

            return(form);
        }