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)方法。

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

  • 相关阅读:
    LeetCode(274)H-Index
    LeetCode(279)Perfect Squares
    LeetCode(278)First Bad Version
    LeetCode(289)Game of Life
    LeetCode(292) Nim Game
    LeetCode(282) Peeking Iterator
    解决Secure Shell Client(SSH)客户端中文乱码的方法
    Mysql 或者当前时间戳
    java http请求url报错505,但是浏览器可以正常返回json数据
    查询直播流实时帧率和码率 签名
  • 原文地址:https://www.cnblogs.com/kennywangjin/p/4064825.html
Copyright © 2011-2022 走看看