zoukankan      html  css  js  c++  java
  • 如何为窗体应用程序显示控制台

          目的是为了显示Console.Write()信息以便调试(VS的output窗口是可以显示的,但是,实际情况是,脱离了VS的, 远程调试?forget it!反正是脱离了啦) 

    发现,其实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:

    some APIs about console
  • 相关阅读:
    重置所有视图
    利用ASP发送和接收XML数据的处理方法
    win2003上传、下载大小限制的问题
    转 C#中文转换成累加拼音声母,直接使用
    用LogParser对IIS 日志进行分析
    应用于服务器的软件防火墙介绍
    ASP.NET Ajax资料收集贴
    BlackICE简单应用
    ajax 跨域访问解决方案
    IBM T61 上蓝牙软件BlueSoleil的使用方法
  • 原文地址:https://www.cnblogs.com/chuncn/p/1508011.html
Copyright © 2011-2022 走看看