【问题标题】:How to show the console on a C# program with Windows application output type如何在具有 Windows 应用程序输出类型的 C# 程序上显示控制台
【发布时间】:2014-05-01 14:42:06
【问题描述】:

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

但是我也想允许一个帮助命令行参数,如果你从命令行使用“/?”运行它,它将显示有关程序的详细信息。作为论据。

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

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

  [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);
        }
 }

【问题讨论】:

标签: c# console console-application


【解决方案1】:

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

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 应用程序,您也可以使用该控制台。

【讨论】:

    【解决方案2】:

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

    如需,请了解如何使用命令行参数here。 基本上声明 Main 接受参数作为字符串数组:

    static void Main(string[] args)
    

    使用简单的对话框形式来显示帮助信息,甚至是一个非常简单的对话框形式的 MessageBox。

    这可以让您更好地控制而不是试图拼凑一些本来不应该放在一起的东西。

    【讨论】:

      【解决方案3】:

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

      隐藏窗口相当简单。示例见How to hide / unhide a process in C#?

      【讨论】:

        猜你喜欢
        • 2019-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多