如何在Winforms中包含控制台?

8
我想在Winform中嵌入控制台窗口。有没有办法实现这个功能?
3个回答

8
今日免费次数已满, 请开通会员/明日再来
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace waTest
{
    public partial class Form1 : Form
    {
        [DllImport("Kernel32.dll")]
        static extern Boolean AllocConsole( );

        public Form1( )
        {
            InitializeComponent();
        }

        private void Form1_Load( object sender, EventArgs e )
        {
            if ( !AllocConsole() )
                 MessageBox.Show("Failed");
            Console.WriteLine("test");
            string input = Console.ReadLine();
            MessageBox.Show(input);
        }
    }
}

@rerun,怎么回事,找不到Kernal32.dll?这是一个x86系统。 - Arlen Beiler
@rerun,可能是我将其设置为控制台应用程序而不是WinForms应用程序。我假设Form1_Load应该在窗体加载时运行,这正确吗?我该如何让它运行? - Arlen Beiler
1
哦,你想要在窗口中显示控制台。你可以编写自己的代码并将输入和输出重定向到stdout和stdin。或者你可以嵌入PowerShell,但是没有内置的控件。 - rerun
3
我想在Winform中嵌入一个控制台窗口 - 明确清晰。 - Philip Wallace
如果我希望将它们分开怎么办?通过分开,我的意思是当控制台应用程序运行时,我仍然想在我的 Windows 应用程序中做一些工作,无论我是否关闭了控制台。在您的情况下,在控制台关闭之前,我无法对 Windows 窗体执行任何操作。 - kashif
显示剩余2条评论

3
哦!您想要窗口中的控制台。 您可以编写自己的并将输入和输出管道连接到stdout和stdin。 或者您可以嵌入PowerShell,但没有内置控件。 - rerun Oct 12'10 at 19:49

为什么这个答案(唯一一个真正的答案)不在顶部? - Paul Stelian

2
您可以基本上通过以下方式实现:
  1. 创建cmd进程
  2. 将该进程的父级设置为表单(或某个面板)
  3. 在需要时插入调整大小的事件
  4. 当主进程不再需要cmd进程时,终止该进程。
您需要直接调用API进行此操作(需要SetParent和SetWindowPos)。以下是一篇带有示例的文章,介绍如何使用API完成此操作: http://www.geekpedia.com/tutorial230_Capturing-Applications-in-a-Form-with-API-Calls.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接