发现,其实win32 是提供了“为进程分配控制台”这样的方法的,这就是:
/// <summary>
/// Allocates a new console for the calling process
/// </summary>
/// <returns>If the function succeeds, return true</returns>
[DllImport("kernel32")]
static extern bool AllocConsole()
调用该方法的进程的标准输入流和输出流都将默认地与这个方法创建的控制台关联起来,也就是说调用Console.xxx()方法都将是针对这个控制台了。
OK,简单地包装一下:
public class ConsoleWindow2
{
public static IntPtr CreateConsole()
{
var console = new ConsoleWindow2()
return console.Hwnd
}
public IntPtr Hwnd { getprivate set}
public ConsoleWindow2()
{
Initialize()
}
public void Initialize()
{
Hwnd = GetConsoleWindow()
// Console app
if (Hwnd != IntPtr.Zero)
{
return
}
// Windows app
AllocConsole()
Hwnd = GetConsoleWindow()
}
#region Win32
[DllImport("kernel32")]
static extern IntPtr GetConsoleWindow()
[DllImport("kernel32")]
static extern bool AllocConsole()
#endregion
}
试验一下:
如果需要更多的控制,可以参考下面这些和控制台相关的API:
要创建控制台程序,就要知道什么是控制台。在开始-运行-输入cmd-回车,就会发现一个黑漆漆的窗口,这个跟控制台程序的外貌就差不多。控制台程序没有窗口,没有控件,只是通过像DOS一样的命令符来输入命令。控制台最基本的命令就是“标准输入()”和“标准输出()”(学过C++的童鞋应该知道,在C++里这些代码貌似是"std::cin.get()"和"std::cout<<“”")。标准输入是让用户输入一个命令,程序好知道用户要做什么。标准输出是输出一些文本。在控制台里除了窗口的那些功能其他的命令几乎都可以使用。
可以先做一个输出“好世界”的程序。这个代码其实很简单:
.版本 2
.程序集 程序集1
.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
标准输出 (1, “好世界”) ' 1是标准输出设备,就是显示屏,“好世界”就是要输出的内容
返回 (0) ' 0代表运行正常,Windows定义的
那啥,把这段代码写成个网页(这段代码是一段html),就知道代码在IDE的样子啦:
<body><table border=0 cellpadding=4 cellspacing=1 bgcolor=#999999 style='font-size: 9ptcolor: #000000'><tr style='background-color:#F0F0F0'><td>程序集名</td><td>保留</td><td>保留</td><td>备注</td></tr><tr bgcolor=#FFFFFF><td><font color=#000080>程序集1</font></td><td></td><td></td><td></td></tr></table><br /><table border=0 cellpadding=4 cellspacing=1 bgcolor=#999999 style='font-size: 9ptcolor: #000000'><tr style='background-color:#E6EDE4'><td>子程序名</td><td>返回值类型</td><td>公开</td><td colspan=3>备注</td></tr><tr bgcolor=#FFFFFF><td><font color=#000080>_启动子程序</font></td><td><font color=#0000FF>整数型</font></td><td> </td><td colspan=3><font color=#008000>本子程序在程序启动后最先执行</font></td></tr></table><table border=0 cellpadding=0 cellspacing=0 bgcolor=#FFFFFF style='font-size: 9ptcolor: #000000font-family: 宋体'><tr><td height=22>标准输出 (1, <font color=#008080>“好世界”) ' <font color=#008000>1是标准输出设备,就是显示屏,“好世界”###char_color_end###就是要输出的内容</font></td></tr><tr><td height=22>返回 (0) ' <font color=#008000>0代表运行正常,Windows定义的</font></td></tr></table></table><br /><table width=300 border=0 cellpadding=4 cellspacing=1 bgcolor=#999999 style='font-size: 9ptcolor: #000000'><tr style='background-color:#E6EDE4color: green'><td colspan=2><font face=Webdings color=red>i</font>以上代码采用“点易编程助手”生成</body>
控制台不止这些功能的。。。用易语言做个计算器吧!
先打开易语言,新建里选择控制台程序。写上代码:
.版本 2
.程序集 程序集1
.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
.局部变量 加数i, 整数型, , , 第一个加数,用来中转第一次输入值
.局部变量 加数ii, 整数型, , , 第二个加数,用来中转第二次输入值
标准输出 (1, “这是一个加法计算器!” + #换行符) ' 前面说过的,只是让他换行
标准输出 (1, “第一个加数:”) ' 也是的
加数i = 到数值 (标准输入 ()) ' 返回用户的输入的,是文本型,所以要先转换
标准输出 (1, “第二个加数:”) ' 也是的
加数ii = 到数值 (标准输入 ()) ' 返回用户的输入的,是文本型,所以要先转换
标准输出 (1, “最后结果是:” + 到文本 (加数i + 加数ii)) ' 输出结果
标准输出 (1, #换行符 + “回车结束”) ' 输出信息
标准输入 () ' 用来让程序停靠,不然去掉的话输入完就一下闪过。
返回 (0) ' 前面说过的,懂的
恩,代码功能能在代码里备注了。
最后做个总结:控制台程序是不能用窗口、控件的,输入输出只能通过上面的命令。支持库不是控件的功能都可以用。
程序入口点不对!你是不是main? 要换成WinMain,如果用的是MinGW -G++编译器,需要添加连接选项,好像是-lwindow。原因大概是这样的,以前用过这个IDE,现在只用VS了,Windows平台还是用VC++最好。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)