圖形化命令行工具:


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

如圖所示,運行效果。這樣,我們可以封裝很多常用的命令到圖形界面,便於非專業人員的使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM