如何为窗体应用程序显示控制台

                     如何为窗体应用程序显示控制台
                               周银辉


由于某种特殊需求(⊙﹏⊙),需要将窗体应用程序的控制台输出显示出来,其实是为了显示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 {  get private   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

还是简单地声明一下:
博文中的内容可能是一个小技巧,但绝非特定问题的解决方案,所以不要太在意其是否有意义或用途,或许对于不同的人不同的场景有着不同的意义或用途。
还是那句话:仅供参考 :)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值