您的位置:首页 > 其它

winform 运行中使用控制台动态输出调试及运行信息

2011-08-14 20:25 686 查看

如何:在 Winform 动态启动、控制台命令行?

需求

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);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: