繁体   English   中英

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

[英]How to show the console on a C# program with Windows application output type

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

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

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

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

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

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

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应用程序,则在运行命令后加上/即可使用。

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

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

static void Main(string[] args)

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

这给您带来了更好的控制能力,而不是试图拼凑那些本来就不是真正的东西。

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

隐藏窗口非常简单。 请参见如何在C#中隐藏/取消隐藏进程? 举个例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM