命令行我想大家都用过:
今天我打算干的,就是把它弄到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介绍如下
先给cmd.exe一个进程p
输入命令后,执行命令
读取命令行的响应
注意,因为是在另一个进程中异步读取数据,所以update里是不能直接修改输出TextBox的Text属性的(不是同一个线程)。所以用一个简单的委托解决这个问题。
---------------------
嗯,没了,就这么简单。
Process非常强大,欢迎各位贴出好玩的构思,大家一起乐一乐。

今天我打算干的,就是把它弄到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介绍如下
先给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
9
10
|
delegate
void
updateDelegate(
string
msg);
void
update(
string
msg)
{
if
(
this
.InvokeRequired)
Invoke(
new
updateDelegate(update),
new
object
[] { msg });
else
{
textBox2.Text += msg;
}
}
|
---------------------
嗯,没了,就这么简单。
Process非常强大,欢迎各位贴出好玩的构思,大家一起乐一乐。