有没有办法从WinForms/WPF应用程序启动/打开控制台?

问题描述:

我有一个Windows窗体应用程序,我想打开一个控制台按需(当我按下按钮的例子),我可以使用标准控制台类进行交互。有没有办法做到这一点?有没有办法从WinForms/WPF应用程序启动/打开控制台?

是的,你需要与Win32互操作才能做到这一点。

public class ConsoleHelper 
{ 
    public static int Create() 
    { 
     if (AllocConsole()) 
      return 0; 
     else 
      return Marshal.GetLastWin32Error(); 
    } 

    public static int Destroy() 
    { 
     if (FreeConsole()) 
      return 0; 
     else 
      return Marshal.GetLastWin32Error(); 
    } 

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage"), SuppressUnmanagedCodeSecurity] 
    [DllImport("kernel32.dll", SetLastError = true)] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    static extern bool AllocConsole(); 


    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage"), SuppressUnmanagedCodeSecurity] 
    [DllImport("kernel32.dll", SetLastError = true)] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    static extern bool FreeConsole(); 
} 

现在您可以调用Create()创建与您的应用程序关联的控制台窗口。

+1

谢谢。有效。现在我有另一个问题。如果产生的控制台关闭,我的整个应用程序就会关闭。有没有办法阻止? – 2009-12-23 15:39:56

+0

不容易。您可以尝试使用本文中的技术禁用关闭功能:http://*.com/questions/877839/stop-a-net-console-app-from-being-closed/878334#878334 – Paolo 2009-12-23 16:07:01

结帐Eric Petroelje的answer here。它显示了可以在运行时创建控制台的代码。