zoukankan      html  css  js  c++  java
  • 图形化命令行工具:

    很多专业的配置工具都不提供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)方法。

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

  • 相关阅读:
    Python中的类(上)
    Django REST Framework API Guide 07
    Django REST Framework API Guide 06
    Django REST Framework API Guide 05
    Django REST Framework API Guide 04
    Django REST Framework API Guide 03
    Django REST Framework API Guide 02
    Django REST Framework API Guide 01
    Django 详解 信号Signal
    Django 详解 中间件Middleware
  • 原文地址:https://www.cnblogs.com/kennywangjin/p/4064825.html
Copyright © 2011-2022 走看看