『C#基础』调用CMD的一个小工具

『C#基础』调用CMD的一个小工具

由于经常要使用CMD的一些命令,比如查看IP,Ping一个网址之类的。于是就写了一个调用CMD.exe的小工具

主要就是实现这样一个事情:调用CMD.exe然后传给它我想要执行的命令,最后获取结果。

界面:

image

image

代码:

主要执行代码using System.Diagnostics;
using System.IO;

namespace Client
{
    class ExcuteCMD
    {
        static Process p = new Process();
        public static string Excute(string cmd)
        {
            //创建Process对象
            p.StartInfo.FileName = "cmd.exe";          //要调用的程序 
            p.StartInfo.UseShellExecute = false;       //关闭Shell的使用 
            p.StartInfo.RedirectStandardInput = true;  //重定向标准输入 
            p.StartInfo.RedirectStandardOutput = true; //重定向标准输出 
            p.StartInfo.RedirectStandardError = true;  //重定向错误输出 
            p.StartInfo.CreateNoWindow = true;         //设置不显示窗口 

            p.Start();  //启动进程 
            p.StandardInput.WriteLine(cmd); //要执行的命令 
            p.StandardInput.WriteLine("exit");
            #region 吸收版权信息
            p.StandardOutput.ReadLine();
            p.StandardOutput.ReadLine();
            p.StandardOutput.ReadLine();
            p.StandardOutput.ReadLine();
            p.StandardOutput.ReadLine();
            #endregion
            string strRst = p.StandardOutput.ReadToEnd();  //从输出流获取命令执行结果 
             // logOut(strRst,cmd); // 记录执行到日志文件

            return strRst;
        }
        public static void closeCMD()
        {
            p.Close();
        }
        private static void logOut(string log,string cmd)
        {
            FileStream fs = new FileStream("log.txt", FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter sw = new StreamWriter(fs);

            sw.Flush();

            sw.BaseStream.Seek(0, SeekOrigin.End);
            sw.WriteLine(cmd + log);
            sw.WriteLine();

            sw.Flush();
            sw.Close();
            fs.Close(); 
        }
    }
}

WPF界面代码using System.Windows;
using System.Windows.Input;

namespace Client
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            tbCmd.Focus();
        }

        private void btnSubmit_Click(object sender, RoutedEventArgs e)
        {
            lblResult.Content = ExcuteCMD.Excute(tbCmd.Text);            
        }

        private void btnClose_Click(object sender, RoutedEventArgs e)
        {
            ExcuteCMD.closeCMD();
            this.Close();
        }

        private void btnPingQQ_Click(object sender, RoutedEventArgs e)
        {
            lblResult.Content = ExcuteCMD.Excute("Ping www.qq.com");
        }

        private void btnIPConfig_Click(object sender, RoutedEventArgs e)
        {
            lblResult.Content = ExcuteCMD.Excute("ipconfig");
        }

        private void tbCmd_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                btnSubmit_Click(sender, e);
            }
        }
    }
}

WPF界面代码<Window x:Class="Client.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="CMD命令执行工具" Height="300" Width="478" MinWidth="400" MinHeight="300" Icon="/Client;component/Images/21.ico">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="210*" />
            <RowDefinition Height="28*" />
            <RowDefinition Height="23*" />
        </Grid.RowDefinitions>
        <Button Content="执行" Height="23" Margin="0,0,66,5" Name="btnSubmit" VerticalAlignment="Bottom" TabIndex="2" Click="btnSubmit_Click" HorizontalAlignment="Right" Width="60" Grid.Row="1" />
        <TextBox Height="23" Name="tbCmd" VerticalAlignment="Bottom" Margin="0,0,132,5" TabIndex="1" Grid.Row="1" KeyDown="tbCmd_KeyDown" />
        <Button Content="结束" Height="23" HorizontalAlignment="Right" Margin="0,0,0,5" Name="btnClose" VerticalAlignment="Bottom" Width="60" Click="btnClose_Click" Grid.Row="1" />
        <ScrollViewer HorizontalAlignment="Stretch" Name="scrollViewer1" VerticalAlignment="Stretch">
            <Label Height="Auto" Name="lblResult" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
        </ScrollViewer>
        <Button Content="PingQQ" Height="23" HorizontalAlignment="Left" Name="btnPingQQ" VerticalAlignment="Top" Width="56" Click="btnPingQQ_Click" Grid.Row="2" />
        <Button Content="IPConfig" Height="23" HorizontalAlignment="Left" Margin="62,0,0,0" Name="btnIPConfig" VerticalAlignment="Top" Width="56" Click="btnIPConfig_Click" Grid.Row="2" />
    </Grid>
</Window>

转载于:https://my.oschina.net/skyler/blog/706086

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108953.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vue单页应用和多页应用_多页面应用需要vuejs吗

    vue单页应用和多页应用_多页面应用需要vuejs吗进入一家新的公司,要开发移动端app项目,前端技术选型时前端组长选的是vue的多页面开发,当时很蒙,vue不是单页面开发吗?咋出来多页面的。接触之后才发现确实存在也挺简单的,省去了路由表的配置。那就给大家整体思路分析一波吧。不足之处还请包涵!单页面开发我就不多说了,主要讲多页面的开发模式与最终效果,网上一搜单页面会有好多文章博客,但是搜多页面的就很少了,比如下面这个就是列了一下两种开发模式的优缺点。首先多页开发,肯定是一个页面就是一个单独文件,每个文件也有自己的.vue.js和comp.

    2022年10月13日
    2
  • django使用celery_Django unchained

    django使用celery_Django unchained前言环境celery==5.0.2在安装完celery后,运行celery会报以下错误ModuleNotFoundError:Nomodulenamed'click._bashc

    2022年8月7日
    6
  • Python中sys模块

    sys-系统特定的参数和功能该模块提供对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数。它始终可用。sys.argv传递给Python脚本的命令行参数列表。argv[0]是脚本名称(依赖于操作系统,无论这是否是完整路径名)。如果使用-c解释器的命令行选项执行命令,argv[0]则将其设置为字符串’-c’。如果没有脚本名称传递给Python解释器,argv[0]则为空字符串…

    2022年4月5日
    51
  • android中彻底退出App的办法「建议收藏」

    android中彻底退出App的办法「建议收藏」所谓的“彻底退出App”的含义是包括释放所有Appnew出来的东西,比如说某些正在运行的线程、定时器之类的。需要注意的是:finish()方法是作用于Activity,因此,即使finish了app的最后一个Activity,app在运行过程中new出来的那些线程什么的仍然有可能在运行(如果没有明显的代码导致它们退出的话)。因此,要所谓”彻底退出“,个人的看法是在最后一个finish()…

    2022年7月17日
    23
  • idea2021激活码 mac(最新序列号破解)

    idea2021激活码 mac(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号