[英]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应用程序,则在运行命令后加上/即可使用。
当我需要做这样的事情时,我通常将我的应用程序变成控制台应用程序。 然后,我解析main中的args(如果有的话),并决定是否要隐藏控制台窗口并启动UI或写入控制台。
隐藏窗口非常简单。 请参见如何在C#中隐藏/取消隐藏进程? 举个例子
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.