打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
给命令行(cmd)做一个GUI——Process的应用

给命令行(cmd)做一个GUI——Process的应用

?2012 野比Conmajia

下载源代码

一项古老的手法

命令行我想大家都用过:

今天我打算干的,就是把它弄到WinForm里来。。做出来就像这样(动画)

如果你要问这蛋疼的做法有什么意义,看

所以你可以给命令行下的「DOS」程序,穿上一层WinForm的外衣,给原来只有命令行的程序制作一个精美的GUI。。比如uharc.exe,比如csc.exe
Bla bla bla……
除了命令行,Process还可以干很多很多事情,更多的用法,那就得看你的创意了。
---------------
程序思路是这样的:
我可以通过运行cmd.exe来操作命令行,现在要给它一个GUI
Windows的命令行cmd.exe --> 新进程Process --> 你的WinForm --> 对玩家来说,看到的只有GUI
用到了System.Diagnostics.Process进程类来运行和管理cmd.exe
Process介绍如下

提供对本地和远程进程的访问并使您能够启动和停止本地系统进程。
Process 组件提供对正在计算机上运行的进程的访问。用最简短的话来说,进程就是当前运行的应用程序。线程是操作系统向其分配处理器时间的基本单位。线程可执行进程的任何一部分代码,包括当前由另一线程执行的部分。
对于启动、停止、控制和监视应用程序等任务,Process 组件是很有用的工具。使用 Process 组件,可以获取正在运行的进程的列表,或者可以启动新的进程。Process 组件用于访问系统进程。初始化 Process 组件后,可使用该组件来获取有关当前运行的进程的信息。此类信息包括线程集、加载的模块(.dll 和 .exe 文件)和性能信息(如进程当前使用的内存量)。

 先给cmd.exe一个进程p

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Process p; //进程
StreamWriter input; //输入数据流
public Form1()
{
    InitializeComponent();
    p = new Process();
    p.StartInfo.FileName = "cmd.exe";
    p.StartInfo.UseShellExecute = false;//自定义shell
    p.StartInfo.CreateNoWindow = true;//避免显示原始窗口
    p.StartInfo.RedirectStandardInput = true;//重定向标准输入(原来是CON)
    p.StartInfo.RedirectStandardOutput = true;//重定向标准输出
    p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
    //数据接收事件(标准输出重定向至此)
    p.Start();//GO
    input = p.StandardInput;//重定向输入
    p.BeginOutputReadLine();//开始监控输出(异步读取)
}

 输入命令后,执行命令

1
2
3
4
private void button1_Click(object sender, EventArgs e)
{
    input.WriteLine(textBox1.Text);//直接写入流即可
}

 读取命令行的响应

1
2
3
4
void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
    update(e.Data + Environment.NewLine);
}

 注意,因为是在另一个进程中异步读取数据,所以update里是不能直接修改输出TextBox的Text属性的(不是同一个线程)。所以用一个简单的委托解决这个问题。

1
2
3
4
5
6
7
8
delegate void updateDelegate(string msg);
void update(string msg)
{
    if (this.InvokeRequired)
        Invoke(new updateDelegate(update), new object[] { msg });
    else
        textBox2.Text += msg;
}

 嗯,没了,就这么简单。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#启动进程之Process
[Unity3d]C#调用WINDOWS命令行(CMD)
C#中隐式操作CMD命令行窗口
C#执行DOS命令(CMD命令)
C#正确方式让程序以管理员权限启动
C# 调用命令行执行Cmd命令的操作
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服