命令行程序增加 GUI 外壳

摘要:
Conmajia2012UpdatedonFeb.21,2018命令行大家都用过:图1命令行程序工作界面现在想办法为它做一个GUI外壳,实际效果参考图2.图2带GUI外壳的命令行程序程序思路是这样的:通过运行cmd.exe来操作命令行,现在要给它一个GUI.Windows的命令行cmd.exe(ightarrow)新进程Process(ightarrow)WinForm(ightarrow)GUI

Conmajia © 2012
Updated on Feb. 21, 2018

命令行大家都用过:

命令行程序增加 GUI 外壳第1张

图 1 命令行程序工作界面

现在想办法为它做一个 GUI 外壳,实际效果参考图 2.

命令行程序增加 GUI 外壳第2张

图 2 带 GUI 外壳的命令行程序

程序思路是这样的:

通过运行 cmd.exe 来操作命令行,现在要给它一个 GUI.

Windows 的命令行 cmd.exe( ightarrow) 新进程 Process( ightarrow) WinForm ( ightarrow) GUI

这一过程用到了 System.Diagnostics.Process 进程类来运行和管理 cmd.exe.

Process 介绍如下:

提供对本地和远程进程的访问并使您能够启动和停止本地系统进程.

Process 组件提供对正在计算机上运行的进程的访问. 用最简短的话来说,进程就是当前运行的应用程序. 线程是操作系统向其分配处理器时间的基本单位. 线程可执行进程的任何一部分代码,包括当前由另一线程执行的部分.

对于启动、停止、控制和监视应用程序等任务,Process 组件是很有用的工具. 使用 Process 组件,可以获取正在运行的进程的列表,或者可以启动新的进程. Process 组件用于访问系统进程. 初始化 Process 组件后,可使用该组件来获取有关当前运行的进程的信息. 此类信息包括线程集、加载的模块(.dll.exe 文件)和性能信息(如进程当前使用的内存量).

先给 cmd.exe 一个进程 p.

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(); // 开始监控输出(异步读取)
}

执行命令:

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

读取命令行的响应:

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

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

delegate void updateDelegate(string msg);
void update(string msg)
{
    if (this.InvokeRequired)
        Invoke(new updateDelegate(update), new object[] { msg });
    else
        textBox2.Text += msg;
}

参考源代码:Download

The End. (Box)

免责声明:文章转载自《命令行程序增加 GUI 外壳》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇minio研究文档代价敏感学习初探下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

windows的命令行工具和DOS工具的区别

很多的系统管理员可能认为命令行是程序员编程用的,这是不对的,其实命令行是另一种用来管理计算机的接口。1 命令行窗口        Windows NT/Windows 2000以后的操作系统为用户提供了两种命令行窗口:cmd.exe和command.com,CMD.EXE是Windows 窗口命令行接口,因此它可以通过窗口右上角的X来关闭,它不是一个dos...

vscode之.netcore的初学者使用和配置(二)

一,基于上一篇( vscode之.netcore的初学者使用和配置(一))文章的基础,我们使用 vscode来创建项目 点击下面,我们把终端这个窗口显示出来, 二,输入命令行dotnet new,我们查看我们可以创建什么类型的项目,和命令行,如下图  三,我们先选定一个文件目录,然后再创建项目,如下 四,我们创建一个控制台,命令行:dotnet ne...

激活windows专业版(激活windows10专业版,解决“我们无法在此设备上激活windows因为无法连接到你的组织的激活服务器 ”)

本来系统用的好好的,但是前几天系统突然提示我要去取设置里面激活windows,我就想:我的系统好像是原厂正版的吧,怎么就过期了呢?没办法只能搜索下怎么激活,去系统城,各大网站什么的试了好多密钥全部不行。最后找到了一个能用的,今天记录一下 Solution 以管理员身份打开cmd 然后 slmgr.vbs -skms zh.us.to粘贴进去运行,好了之后去...

Ubuntu Git GUI工具GitKraken安装

step1:下载 下载地址:https://www.gitkraken.com/download/linux-deb step2:安装 终端输入命令:sudo dpkg -i gitkraken-amd64.deb 如果安装不成功,输入命令: sudo apt-get -f install 然后重新输入命令: sudo dpkg -i gitkraken-...

GDB 命令行调试之路(全 19)

1: 基本命令. 2: 断点管理/多文件调试. 3: 函数基本调试. 4: 中级命令. 5: 监视内存. 6: 高级命令. 7: 类的调试. 8: 线程调试 9: 总结. 11.hello gdb!2.FAQ hello gdb! 首先准备好我们的调试文件test.cpp 如下 #include <iostr...

UDK命令

UDK命令行参数与控制台命令都是大小写不敏感的 命令行udn中文udn英文 全词大小写匹配,正则表达式,在c++代码中搜索减号开头的命令行参数(如:-BENCHMARK、-onethread等):ParseParam[ ]*( 全词大小写匹配,正则表达式,在c++代码中搜索KEY=的命令行参数(注:会搜索到解析ini中的key-value字符串,需挑选一下...