努力工作,关爱家人

博客园 首页 新随笔 联系 订阅 管理

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

解答:
  AllocConsoleFreeConsole 这两个 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);
        }
    }
}
posted on 2011-12-21 14:54  jelink  阅读(689)  评论(1)    收藏  举报