擦了一下午地板,腰都快断了。躺着喝点啤酒编个小程序玩。。
非常简单。。灰常简单。。看了你就知道了。。
----------------
源代码 (如果你实在懒得C+V了,你就下载吧)
命令行我想大家都用过:
今天我打算干的,就是把它弄到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非常强大,欢迎各位贴出好玩的构思,大家一起乐一乐。
非常简单。。灰常简单。。看了你就知道了。。
----------------
源代码 (如果你实在懒得C+V了,你就下载吧)
命令行我想大家都用过:
今天我打算干的,就是把它弄到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
-
C# code
-
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(); // 开始监控输出(异步读取) }
输入命令后,执行命令
-
C# code
-
private void button1_Click( object sender, EventArgs e) { input.WriteLine(textBox1.Text); // 直接写入流即可 }
读取命令行的响应
-
C# code
-
void p_OutputDataReceived( object sender, DataReceivedEventArgs e) { update(e.Data + Environment.NewLine); }
注意,因为是在另一个进程中异步读取数据,所以update里是不能直接修改输出TextBox的Text属性的(不是同一个线程)。所以用一个简单的委托解决这个问题。
-
C# code
-
delegate void updateDelegate( string msg); void update( string msg) { if ( this .InvokeRequired) Invoke( new updateDelegate(update), new object [] { msg }); else { textBox2.Text += msg; } }
---------------------
嗯,没了,就这么简单。
Process非常强大,欢迎各位贴出好玩的构思,大家一起乐一乐。