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
  • 相关阅读:
    归并排序
    数据组合求值
    轨道周期
    类及对象构建
    日期改写
    排列组合去重
    库存更新
    Java性能测试从入门到放弃-详解篇
    Java性能测试从入门到放弃-概述篇
    cocos2d-x安装教程
  • 原文地址:https://www.cnblogs.com/chuncn/p/1508011.html
Copyright © 2011-2022 走看看