WinForm程序启动控制台窗口Console
本文转载:http://blog.csdn.net/oyi319/article/details/5753311
2.WinForm程序和控制台窗口Console
如果你调试过SharpDevelop的源程序,会发现它在DEBUG模式时会出现一个控制台窗口,以显示日志信息。或许我使用的方法与其不同,不过你可以试一试,写出我们自己的调试日志代码。
首先要解决的问题是如何在Debug模式时显示Console窗口。我确定,这是一个WinForm项目,也没有改过它的输出类型。我们需要在项目的入口点使用一些API函数将控制台显示出来:
它们是 AllocConsole 和 FreeConsole。
- [DllImport("kernel32.dll")]
- public static extern Boolean AllocConsole();
- [DllImport("kernel32.dll")]
- public static extern Boolean FreeConsole();
然后我们使它在Main()开始处判断DEBUG编译标记,调用AllocConsole方法显示控制台,然后在Main()的结束处判断DEBUG编译标记,调用FreeConsole方法关闭控制台。这样,我们就可以使用Console.Write等方法将调试信息显示在这个控制台窗口里。
为了达到更好的效果,我们写一个Shell类,用它来封装Console.WriteLine方法,输出个性化信息。我是这样做的,根据输出到控制台的文本的前几个字判断为“警告”、“错误”、“注意”时,输出带有黄色、红色、绿色的文字,其他输出信息输出控制台缺省的灰色文字,以起到区分效果,还要在每条信息前加上输出信息的当时时间。
这个Shell类是这样的:
- /// <summary>
- /// 与控制台交互
- /// </summary>
- static class Shell
- {
- /// <summary>
- /// 输出信息
- /// </summary>
- /// <param name="format"></param>
- /// <param name="args"></param>
- public static void WriteLine(string format, params object[] args)
- {
- WriteLine(string.Format(format, args));
- }
- /// <summary>
- /// 输出信息
- /// </summary>
- /// <param name="output"></param>
- public static void WriteLine(string output)
- {
- Console.ForegroundColor = GetConsoleColor(output);
- Console.WriteLine(@"[{0}]{1}", DateTimeOffset.Now, output);
- }
- /// <summary>
- /// 根据输出文本选择控制台文字颜色
- /// </summary>
- /// <param name="output"></param>
- /// <returns></returns>
- private static ConsoleColor GetConsoleColor(string output)
- {
- if (output.StartsWith("警告")) return ConsoleColor.Yellow;
- if (output.StartsWith("错误")) return ConsoleColor.Red;
- if (output.StartsWith("注意")) return ConsoleColor.Green;
- return ConsoleColor.Gray;
- }
- }
那么程序入口函数Main代码如下:
- /// <summary>
- /// 应用程序的主入口点。
- /// </summary>
- [STAThread]
- static void Main()
- {
- #if DEBUG
- AllocConsole();
- Shell.WriteLine("注意:启动程序...");
- Shell.WriteLine("/tWritten by Oyi319");
- Shell.WriteLine("/tBlog: http://blog.csdn.com/oyi319");
- Shell.WriteLine("{0}:{1}", "警告", "这是一条警告信息。");
- Shell.WriteLine("{0}:{1}", "错误", "这是一条错误信息!");
- Shell.WriteLine("{0}:{1}", "注意", "这是一条需要的注意信息。");
- Shell.WriteLine("");
- #endif
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new Form1());
- #if DEBUG
- Shell.WriteLine("注意:2秒后关闭...");
- Thread.Sleep(2000);
- FreeConsole();
- #endif
- }
现在这个控制台窗口,只会在DEBUG模式时显示,而在Release编译时不会出现。 这是不是你想要的调试方法呢?
转载于:https://www.cnblogs.com/51net/p/3994149.html
WinForm程序启动控制台窗口Console相关推荐
- 【OpenGL】二十四、OpenGL 纹理贴图 ( 读取文件内容 | 桌面程序添加控制台窗口 | ‘fopen‘: This function may be unsafe 错误处理 )
文章目录 一.文件读取 二.报错处理 ( 'fopen': This function or variable may be unsafe. ) 三.桌面程序添加控制台窗口 四.相关资源 一.文件读取 ...
- 向MFC应用程序添加控制台窗口
简介 如果你曾经写过MFC应用程序,也许你忽略了控制台窗口.熟悉了控制台窗口的人会认为它是如此的便捷,我就是一个,认为printf或者cout是最优秀的调试函数,可以在不打开任务管理器的情况下在控制台 ...
- 让Win32窗口程序拥有控制台窗口
让Win32窗口程序拥有控制台窗口 首先,为什么我们有了普通窗口后还要控制台窗口呢?因为我们可以用它方便的输出调试信息,而且普通玩家看到了也会觉得很高端.如果他会输几条命令,可能他会以为自己就是黑客了 ...
- 给Win32 GUI程序增加控制台窗口的方法
给Win32 GUI程序增加控制台窗口的方法 2008年10月11日 星期六 下午 04:43 在Win32的GUI程序中,没有控制台窗口,我们输出调试信息时有些不方便,以往我的做法是使用Messag ...
- C# 控制台程序 隐藏控制台窗口
在某些项目中,需要采用控制台程序,但是又不需要通过dos窗口进行交互,同时打算隐藏掉难看的控制台窗口.实现的方法很多,有的是修改链接命令.我采用的方法略有些麻烦,首先是给窗口命名,之后找到该窗口指针, ...
- 让Dev-C++运行C++程序的控制台窗口等待查看运行结果
2019独角兽企业重金招聘Python工程师标准>>> 在使用Dev-C++运行C++程序时,控制台窗口总是一晃而过,无法看到输出结果,着实让人苦恼,解决这个问题 可以用以下方法: ...
- WinForm程序启动时不显示主窗体的实现方法
望程序启动时不显示主窗体,而只是在SystemTray显示一个图标:当用户点击该图标时,才第一次显示出主窗体来. 作者在文章中已经说得很清楚,将Form的Visible属性设置为false是不行的,因 ...
- 对话框程序启动隐藏窗口
江湖上有众多传闻,ShowWindow是最令人糊涂的,很多人说在OnInitDialog()加上ShowWindow(SW_HIDE) 对话框便不出现,实验证明,这是不行的,可是在非基于对话框的程序 ...
- java制作程序启动进度窗口
运行效果如下: 代码如下: import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension;import ...
- (个人向)C# winForm程序启动时报错:应用程序无法正常启动(0xc000007b)
1.我的开发环境:windows 10 64bit.visual studio 2017,在本机上运行没有问题,但是在别人电脑上运行报错"应用程序无法正常启动(0xc000007b)&quo ...
最新文章
- Keepalived+lvs+httpd之负载均衡
- MySQL如何修改密码
- dict实现原理 python_5分钟看懂系列:Python 线程池原理及实现
- ole2高级编程技术 pdf_别不信,21天就可以学会python,《21天学通Python》pdf免费领取...
- 第一个Polymer应用 - (2)创建你自己的元素
- 1.企业安全建设指南(金融行业安全架构与技术实践) --- 企业信息安全建设简介
- SDUT 2482 二叉排序树
- 交换机配置常用的命令
- quartus频率计 时钟设置_FPGA021 基于QuartusⅡ数字频率计的设计与仿真
- iAntares OSx86 10.6.5 v3.2 繁简英整合版 安装过程【安装过程问题说明】
- unity粒子系统笔记
- 问:全局变量是否可以定义在被多个.c文件包含的头文件.h中?
- Windows10 磁盘活动时间百分之百导致系统卡顿解决方法
- pandas使用to_feather函数将dataframe保存为feather文件(需要依赖pyarrow包)提升大文件读取效率、pandas使用read_feather函数读取feather文件
- 20154327 Exp9 Web安全基础
- Influxdb自定义数据采样(CQ)
- Java 多线程 卖票
- 《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》中文分享(7)
- 关于“远程计算机或设备不接受连接”解决方法
- 推荐几个值得看的技术大佬
热门文章
- php数组array_filter,php数组array_filter()函数和array_slice()函数
- 【C++入门】C++ List类
- git push命令入门
- 【进阶3-4期】深度解析bind原理、使用场景及模拟实现
- 三、MQTT Windosw下的 进一步调试
- Node.js 使用http客户端向网站请求数据并保存
- 新浪微博分享 小记!!!(尚未成功)
- js【Object.prototype.hasOwnProperty()方法】
- JQuery Easy Ui dataGrid 数据表格 --转
- MFC 文档 视图 框架窗口间的关系 和消息传送规律