如何在具有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);
}
}
我还没有找到完全按照您要求的方法,但您可以根据输入打开控制台。例如:
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#中隐藏/取消隐藏进程?例如。