从Winforms控制cmd.exe

Ste*_*ger 10 .net c# vb.net console interop

问题:我想从winforms控制cmd.exe.

我并不是指使用startupinfo在单个进程中的每个命令,然后停止.

我的意思是例如启动(My)SQL或GDB命令提示符,发送命令,接收答案,发送下一个命令,接收下一个答案,停止SQL命令提示符
退出过程.

基本上我想在任何控制台应用程序之上编写GUI.

我想让cmd.exe的输出重定向到文本字段,输入来自另一个文本字段(按下输入/确定按钮).

我没有找到任何样品.有办法吗?

Pie*_*ter 19

CodeProject上有一个很好的例子

祝好运!

-Edit:我认为这更像是它,我创建了一个简单的表单,2个文本框和3个按钮.第一个文本框用于命令输入,第二个(多行)显示结果.

第一个按钮执行命令,第二个按钮更新结果(因为结果被读取为异步)

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        private static StringBuilder cmdOutput = null;
        Process cmdProcess;
        StreamWriter cmdStreamWriter;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            cmdOutput = new StringBuilder("");
            cmdProcess = new Process();

            cmdProcess.StartInfo.FileName = "cmd.exe";
            cmdProcess.StartInfo.UseShellExecute = false;
            cmdProcess.StartInfo.CreateNoWindow = true;
            cmdProcess.StartInfo.RedirectStandardOutput = true;

            cmdProcess.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler);
            cmdProcess.StartInfo.RedirectStandardInput = true;
            cmdProcess.Start();

            cmdStreamWriter = cmdProcess.StandardInput;
            cmdProcess.BeginOutputReadLine();
        }

        private void btnExecute_Click(object sender, EventArgs e)
        {
            cmdStreamWriter.WriteLine(textBox2.Text);
        }

        private void btnQuit_Click(object sender, EventArgs e)
        {
            cmdStreamWriter.Close();
            cmdProcess.WaitForExit();
            cmdProcess.Close();
        }

        private void btnShowOutput_Click(object sender, EventArgs e)
        {
            textBox1.Text = cmdOutput.ToString();
        }

        private static void SortOutputHandler(object sendingProcess,
            DataReceivedEventArgs outLine)
        {
            if (!String.IsNullOrEmpty(outLine.Data))
            {
                cmdOutput.Append(Environment.NewLine + outLine.Data);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在屏幕截图中,您可以看到我输入了cd \命令来更改目录以及在此目录(dir)中执行的下一个命令.替代文字