如何在具有Windows应用程序输出类型的C#程序上显示控制台

本文关键字:类型 程序上 控制台 显示 输出 应用程序 Windows | 更新日期: 2023-09-27 18:01:15

我有一个C#控制台应用程序项目,其中的输出类型设置为"Windows应用程序"。这样控制台就不会在程序开始时闪烁。

然而,我也希望允许一个帮助命令行参数,如果你用"/?"作为参数从命令行运行程序,它将显示有关程序的详细信息。

有没有一种方法可以让程序作为windows应用程序正常运行,但如果传递了帮助参数,则显示控制台?

EDIT-在阅读了这个问题的答案和类似的答案后(这个问题假设您使用控制台应用程序输出类型运行(,我正在使用这个解决方案。

  [DllImport(Kernel32_DllName)]
    private static extern bool AllocConsole();
    [DllImport("kernel32.dll")]
    static extern IntPtr GetConsoleWindow();
    [DllImport("user32.dll")]
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
    const int SW_HIDE = 0;
    const int SW_SHOW = 5;
  static void Main(string[] args)
    {
        if(args.Contains("/?"))
        {
           AllocConsole();
           Console.WriteLine("helpText");
           Console.ReadLine();

           var handle = GetConsoleWindow();
          //Hides console
           ShowWindow(handle, SW_HIDE);
        }
 }

如何在具有Windows应用程序输出类型的C#程序上显示控制台

我还没有找到完全按照您要求的方法,但您可以根据输入打开控制台。例如:

class Program
{
    private const string Kernel32_DllName = "kernel32.dll";
    [DllImport(Kernel32_DllName)]
    private static extern bool AllocConsole();
    static void Main(string[] args)
    {
        if (args[0] == "/")
        {
            AllocConsole();

            Console.WriteLine("Details");
            Console.ReadKey();
            //cases and such for your menu options
        }

即使项目的输出类型是Windows应用程序,如果使用/执行run命令,也会打开一个控制台。

有没有一种方法可以让程序作为windows应用程序正常运行,但如果传递了帮助参数,则显示控制台?

对于您想要的内容,请在此处了解如何使用命令行参数。基本上声明Main以接受作为字符串数组的参数:

static void Main(string[] args)

使用一个简单的对话框来显示帮助消息,甚至是一个MessageBox,这是一个非常简单的对话框

这给了你更好的控制,而不是试图拼凑一些原本不应该拼凑在一起的东西。

当我需要做这样的事情时,我通常会把我的应用程序变成控制台应用程序。然后,我解析main中的args(如果有的话(,并决定是隐藏控制台窗口并启动UI还是写入控制台。

隐藏窗口相当简单。请参阅如何在C#中隐藏/取消隐藏进程?例如。