需求
   winForm 程序输出类型为 windows 程序(不是命令行程序)
   在运行时想输入一些信息编译开发调试,如何实现这一功能

解答:
  AllocConsole、FreeConsole 这两个 API 可以在任何时候调用和关闭 命令行。

代码演示:
API 部分

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices; namespace WindowsFormsApplication1
{
    public partial class NativeMethods {
    
        /// <summary>
        /// 启动控制台
        /// </summary>
        /// <returns></returns>
        [DllImport("kernel32.dll")]
        public static extern bool AllocConsole();
        /// <summary>
        /// 释放控制台
        /// </summary>
        /// <returns></returns>
        [DllImport("kernel32.dll")]
        public static extern bool FreeConsole();         
    
    }
}

启动参数的实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics; namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            try
            {
                
                if(args.Length > 0 && args[0].ToLower() == "-c")
                {//通过命令行 xxxx.exe -c 参数启动,Console
                    
                    //注意:不用 Main(string[] args)、System.Environment.GetCommandLineArgs();  也可以取得命令行参数在任何地方
                    
                    //启动
                    NativeMethods.AllocConsole();
                    Console.WriteLine("控制台以启动");
                }
                
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
            finally
            {
                //关闭 (如果在这个位置其实写不写都行了)
                NativeMethods.FreeConsole();
            }
        }
    }
}

程序实现

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }         private void btnOpenConsole_Click(object sender, EventArgs e)
        {
            //开启控制台
            NativeMethods.AllocConsole();
        }         private void btnCloseConsole_Click(object sender, EventArgs e)
        {
            //关闭控制台
            NativeMethods.FreeConsole();
        }         private void btnOut_Click(object sender, EventArgs e)
        {
            //模拟输出
            Console.WriteLine(textBox1.Text);
        }
    }
}

如何:在 Winform 动态启动、控制台命令行?的更多相关文章

  1. 用批处理启动MySQL命令行工具

    最近在看MySQL,安装好之后,每次在开始菜单去启动MySQL命令行工具的时候,都是直接用root用户连接我本地的数据库 输入密码开始工作,但是要连接服务器上的MySQL的话,就要去CMD下运行 : ...

  2. 控制台命令行API

    js调试系列: 控制台命令行API   上次初步介绍了什么是控制台<js调试系列: 初识控制台>,以及简单的 console.log 输出信息.最后还有两个小问题,我们就当回顾,来看下怎么 ...

  3. WinForm程序启动控制台窗口Console

    本文转载:http://blog.csdn.net/oyi319/article/details/5753311 2.WinForm程序和控制台窗口Console 如果你调试过SharpDevelop ...

  4. js调试系列: 控制台命令行API

    js调试系列目录: - 上次初步介绍了什么是控制台,以及简单的 console.log 输出信息.最后还有两个小问题,我们就当回顾,来看下怎么操作吧. 先打开百度,然后按 F12 打开后,如果不是 C ...

  5. 80端口未被占用,apache无法启动,命令行运行httpd.exe提示文档内容有错

    Apache无法启动,端口被占用的可能性比较大,所以建议大家还是先换端口试试,这个网上说的比较多,具体可参见http://www.cnblogs.com/zdan68/p/3855636.html. ...

  6. 【VS工程设置】 编译动态库,命令行添加参数,不使用预编译头,指定该项目链接 哪种 运行库

    编译动态库 注意: 动态库: [目标文件扩展] => .dll + [配置类型] => 动态库(.dll) 静态库: [目标文件扩展] => .lib + [ 配置类型]=> ...

  7. 一个奇怪的方法解决华为ENSP模拟器路由器启动后命令行一直“#”的问题

    今天打开ensp准备练习一下,设备启动以后发现端口一直是红色.于是打开路由器命令行,发现一直输出“#”号.百度后几乎试了所有方法,什么删除网卡再新建.重启计时器.配置ip地址..都不行. 可是我昨天用 ...

  8. mac下使用mysql控制台命令行

    命令行中输入 open .bash_profile 然后将 alias mysql=/usr/local/mysql/bin/mysqlalias mysqladmin=/usr/local/mysq ...

  9. Ubuntu 默认启动到命令行 12.04

    源文链接:http://my.oschina.net/jackguo/blog/85706 代码: sudo gedit /etc/default/grub 引用: GRUB_CMDLINE_LINU ...

随机推荐

  1. javascript 基础API

    Math.random() 取值范围[0,1)  大于等于0小于1,包括0,不包括1 Math.floor() 向下取整  Math.ceil() 向上取整 第一题:一组数的规则如下:1.1.2.3. ...

  2. bzoj 1023: [SHOI2008]cactus仙人掌图

    这道题是我做的第一道仙人掌DP,小小纪念一下…… 仙人掌DP就是环上的点环状DP,树上的点树上DP.就是说,做一遍DFS,DFS的过程中处理出环,环上的点先不DP,先把这些换上的点的后继点都处理出来, ...

  3. SEO视频教程集合在线观看

    seo是搜索引擎优化(Search Engine Optimization)的英文缩写,是指为了从搜索引擎中获得更多的免费流量,从网站结构.内容建设方案.用户互动传播.页面等角度进行合理规划,使网站更 ...

  4. Entity Framework Code First 迁移数据库

    新版EF,系统实现过程中如果对Model进行更改,队形修改数据库并不能正常运行项目,需要借助Code First 手动迁移数据库 首先启用迁移,允许迁移Context Tools->Librar ...

  5. NPOI Excel导入 导出

    添加引用 using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System; using System.Collections.Gene ...

  6. 【NetOffice Excel】Excel合并单元格【原】

    CSharp操作Excel采用开源的原生.NET程序集NetOffice,格式兼容性更好. 在操作Excel的时候有时候需要合并单元格 using ExcelOffice = NetOffice.Ex ...

  7. [DevExpress]ChartControl之饼状图百分比示例

    关键代码: using System; using System.Data; using System.Windows.Forms; using DevExpress.XtraCharts; name ...

  8. wamp Server2.5 配置 自定义目录

    煎熬了两天终于找到了方法!!! 前提先改成中文 右键"W"图表-> Language -> chinese; 成功改为中文. 自定义目录步骤: 一.添加一个Alias ...

  9. php入门变量

    变量是用于临时存储值的容器.这些值可以是数字.文本,或者是复杂得多的数据. PHP 具有8种变量. 其中包括4种标量(单值)类型——字符串型(字符).整型.浮点型(小数)和布尔型(TRUE或FALSE ...

  10. 题目1444:More is better

    时间限制:3 秒 内存限制:100 兆 特殊判题:否 提交:1362 解决:640 题目描述: Mr Wang wants some boys to help him with a project. ...