WinForm调用CMD命令并实时输出结果到TextBox

想做一个东西就是命令行执行一个东西,然后可以直接在一个TextBox实时看到结果。
有以下几个要点:
1.启动后用StandardInput.WrinteLine输入命令,就像你平时在CMD窗口里做的一样
         process.StandardInput.WriteLine("java -jar JSONRunner.jar tmp.json");    
2.使用   OutputDataReceived 事件,来处理当cmd得到新的输出时的行为,这里这个行为就是把内容更新到TextBox里
     process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
     
3.别忘了  process.BeginOutputReadLine(); 在开始cmd进程后。

4.因为这个等于是两个县城在操作同一个TextBox,所以会有一个warning. 用下面的语句忽略检查
         Control.CheckForIllegalCrossThreadCalls = false;
当然这个比较生硬。详细的分析和解决方法,请看这里:
http://blog.csdn.net/vodistr03/article/details/6658340

5. 每次刷新TextBox把scroll bar滚动到底部。
    this.textBox1.SelectionStart =this.textBox1.Text.Length;
    this.textBox1.ScrollToCaret();




    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Diagnostics;
    using System.IO;

    namespace JSONMgr
    {
        public partial class OutPutForm : Form
        {
            public Process process = null;
            public OutPutForm()
            {
                InitializeComponent();
            }

      

            private void OutPutForm_Shown(object sender, EventArgs e)
            {
                Control.CheckForIllegalCrossThreadCalls = false;
                process = new Process();
                process.StartInfo.FileName = "cmd.exe";
                process.StartInfo.WorkingDirectory = ".";
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.RedirectStandardInput = true;
                process.StartInfo.RedirectStandardOutput = true;
                process.StartInfo.CreateNoWindow = true;
                //Process.Start("cmd.exe");
                process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
                process.Start();

                process.StandardInput.WriteLine("java -jar JSONRunner.jar tmp.json");
                
                //process.StandardInput.WriteLine("exit");

                process.BeginOutputReadLine();
                //using (StreamWriter sw = new StreamWriter("output.log"))
                //{
                // sw.WriteLine(process.StandardOutput.ReadToEnd());
                //}

            }
            private void OutputHandler(object sendingProcess,DataReceivedEventArgs outLine)
            {
                if (!String.IsNullOrEmpty(outLine.Data))
                {
                    StringBuilder sb = new StringBuilder(this.textBox1.Text);
                    this.textBox1.Text = sb.AppendLine(outLine.Data).ToString();
                    this.textBox1.SelectionStart =this.textBox1.Text.Length;
                    this.textBox1.ScrollToCaret();
                }
            }

            private void OutPutForm_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (process != null)
                    process.Close();
            }
        }
    }



### 回答1: 在WinForm中执行CMD命令的方法有很多种,以下是一种常用的方法: 首先,需要在项目中添加System.Diagnostics命名空间。 然后,可以使用Process类来执行CMD命令。可以通过创建一个Process对象,设置其StartInfo属性来指定CMD进程的相关信息,例如要执行的命令、工作目录等。 接下来,可以调用Process对象的Start()方法来启动CMD进程,并执行命令。可以通过Process对象的StandardOutput属性来获取CMD命令输出结果。 最后,可以使用Process对象的WaitForExit()方法等待CMD命令的执行完成,并获取执行结果。 以下是一个简单的示例代码: ```csharp using System.Diagnostics; namespace WinFormCMDTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnExecute_Click(object sender, EventArgs e) { string command = txtCommand.Text; // 获取用户输入的CMD命令 ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = "cmd.exe"; // 指定要执行的命令行程序 psi.UseShellExecute = false; // 不使用操作系统shell启动进程 psi.RedirectStandardInput = true; // 重定向输入流 psi.RedirectStandardOutput = true; // 重定向输出流 psi.CreateNoWindow = true; // 不创建新窗口 Process process = new Process(); process.StartInfo = psi; process.Start(); // 启动CMD进程 // 向CMD进程输入命令 process.StandardInput.WriteLine(command); process.StandardInput.WriteLine("exit"); // 获取CMD命令输出结果 string result = process.StandardOutput.ReadToEnd(); process.WaitForExit(); // 等待CMD命令执行完成 txtOutput.Text = result; // 将CMD命令输出结果显示在WinForm中 } } } ``` 以上代码是一个简单的WinForm应用程序,包含一个Button和两个TextBox控件,用户可以在TextBox中输入CMD命令并点击Button执行。执行结果将显示在另一个TextBox中。 这只是其中一种方法,还可以根据具体需求使用不同的方式来执行CMD命令。 ### 回答2: 在Winform中执行cmd命令可以使用Process类来实现。具体步骤如下: 1. 首先,在Winform项目中添加一个Button按钮,用于触发执行cmd命令的事件。 2. 在按钮的Click事件中编写代码,使用Process类来执行cmd命令。 ``` private void btnExecute_Click(object sender, EventArgs e) { // 创建一个ProcessStartInfo对象,用于设置要执行的cmd命令相关的参数 ProcessStartInfo processStartInfo = new ProcessStartInfo(); processStartInfo.FileName = "cmd.exe"; // 设置要执行的命令为cmd.exe processStartInfo.Arguments = "/C your_cmd_command"; // 设置要执行的具体命令及参数,如执行ipconfig命令可以写成 "ipconfig /all" // 设置启动时不显示窗口 processStartInfo.UseShellExecute = false; processStartInfo.RedirectStandardOutput = true; processStartInfo.CreateNoWindow = true; // 创建一个Process对象,并设置StartInfo属性为之前创建的ProcessStartInfo对象 Process process = new Process(); process.StartInfo = processStartInfo; // 开始执行cmd命令 process.Start(); // 获取命令执行的输出结果 string output = process.StandardOutput.ReadToEnd(); // 关闭cmd窗口 process.WaitForExit(); process.Close(); // 将命令执行的输出结果显示在Winform界面的文本框中 txtOutput.Text = output; } ``` 3. 在代码中的`your_cmd_command`处填入要执行的具体cmd命令,如上例中的ipconfig命令。 4. 最后,在Winform界面上添加一个用于显示cmd命令执行结果的文本框(txtOutput)。 通过以上步骤,点击按钮后,Winform界面将会执行指定的cmd命令,并将命令执行结果显示在文本框中。 ### 回答3: 在WinForms中执行CMD命令可以使用`System.Diagnostics.Process`类来实现。以下是一个简单的示例: 首先,在WinForms应用程序的窗体上添加一个`Button`按钮,然后在点击按钮的事件处理程序中添加以下代码: ```csharp private void button1_Click(object sender, EventArgs e) { string command = "dir"; // 命令 string arguments = "/B"; // 命令参数 // 创建一个ProcessStartInfo对象,用于设置要启动的进程的相关属性 ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = "cmd.exe"; // 运行cmd.exe psi.RedirectStandardInput = true; psi.RedirectStandardOutput = true; psi.UseShellExecute = false; psi.CreateNoWindow = true; // 启动进程 Process p = new Process(); p.StartInfo = psi; p.Start(); // 向CMD窗口输入命令 p.StandardInput.WriteLine(command + " " + arguments); p.StandardInput.WriteLine("exit"); // 读取CMD窗口输出结果 string output = p.StandardOutput.ReadToEnd(); // 关闭进程 p.WaitForExit(); p.Close(); // 将结果显示在MessageBox中 MessageBox.Show(output); } ``` 以上代码中,我们首先设置要执行的命令和参数,然后创建一个`ProcessStartInfo`对象来指定要启动的进程和相关属性。接下来,我们创建一个Process对象,并将ProcessStartInfo对象赋给它,然后启动进程。然后,我们将命令和参数写入CMD窗口的标准输入,并读取CMD窗口的标准输出。最后,关闭进程并将输出结果显示在MessageBox中。 注意:在使用`Process`执行CMD命令时,请小心输入的命令,确保其安全性和合法性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值