图形化命令行工具:

很多专业的配置工具都不提供UI工具,只提供命令行操作,如很多网络设施的配置等。命令行工具具有输入效率高、批量运行等优点,但是对于使用者的专业要求较高,而且,大量的指令输入,对记忆力也是一个考验。

事实上,我们可以借助.net,将某些常用的命令图形化,这样既方便了使用,也减少了输入大量命令的负担。

我们主要使用System.Diagnostics.Process和System.Diagnostics.ProcessStartInfo两个类。

我们新建一个WPF的简单窗体,包含两个文本框,分别用于显示Input和Output信息,然后添加几个命令按钮,注册按钮事件响应:

            var runProcess = new Process();
            string cmd = "ping 10.10.10.2";
            var config = new ProcessStartInfo("cmd.exe"); //执行的程序,这里是cmd.exe命令行工具
            config.RedirectStandardInput = true;  //重定向命令行的输入流,以便我们可以通过程序输入命令以模仿手工输入
            config.RedirectStandardOutput = true;  //输出流重定向,保证可以获取命令行执行命令后的输出结果
            config.UseShellExecute = false;  //不显示命令行运行窗口?
            config.CreateNoWindow = true;  //不显示命令行运行窗口  
            runProcess.StartInfo = config;
            runProcess.OutputDataReceived += runProcess_OutputDataReceived;  //注册输出流事件,一旦命令行输出信息,可以从中取出信息
            runProcess.Start();
            runProcess.StandardInput.WriteLine(cmd); //输入各种控制命令
            runProcess.BeginOutputReadLine();  //开始读取输出信息。这是个关键的步骤,否则不触发任何输出事件

 接下来,就是简单的输出事件订阅:

        void runProcess_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            Dispatcher.BeginInvoke(new Action(() => output.Text += e.Data));
        }

可以看到,仅仅是从DataREceivedEventArgs中的Data获取输出字符串。注意,事件执行程序是在其他线程中运行的,在诸如WINFORM和WPF等STA程序中,必须封送消息到UI线程上,WPF中就是使用Dispatcher.Invoke(Action)方法。

如图所示,运行效果。这样,我们可以封装很多常用的命令到图形界面,便于非专业人员的使用。

posted @ 2014-10-31 13:24  kennywangjin  阅读(3170)  评论(5编辑  收藏  举报