C# 当前进程是否有控制台窗口

2023-07-29,,

WPF应用程序,在VS的项目属性中,可以设置输出类型:

那我们在代码中,如何判断应用的类型呢。有没有控制台?是否Windows应用程序还是控制台应用程序?

Kernel32下函数GetConsoleWindow可以解决这个问题:

[DllImport("kernel32.dll")]
private static extern IntPtr GetConsoleWindow();

1     var consoleWindowHandle = GetConsoleWindow();
2 if (consoleWindowHandle == IntPtr.Zero)
3 {
4 Debug.WriteLine("输出类型为 Windows应用程序");
5 }
6 else
7 {
8 Debug.WriteLine("输出类型为 控制台应用程序");
9 }

另外,如果需要判断控制台应用程序内,主窗口是否为控制台,可以根据窗口句柄来确认:

 1     var consoleWindowHandle = GetConsoleWindow();
2 var mainWindowHandle = Process.GetCurrentProcess().MainWindowHandle;
3
4 if (consoleWindowHandle == IntPtr.Zero)
5 {
6 Debug.WriteLine("输出类型为 Windows应用程序");
7 }
8 else if (consoleWindowHandle == mainWindowHandle)
9 {
10 Debug.WriteLine("输出类型为 控制台应用程序,主窗口也是控制台窗口");
11 }
12 else
13 {
14 Debug.WriteLine("输出类型为 控制台应用程序,但主窗口为Windows窗口");
15 }

我们设置输出类型为控制台应用,并在ShowMainWindow前后,输出结果,验证okay:

注:这里输出到VS控制台,是因为使用了Debug类型。如果是Console.Write,程序会优先输出到控制台窗口内。

如果需要在Windows应用程序下,使用控制台窗口输出日志。可以使用AllocConsole:

    [DllImport("kernel32.dll")]
static extern bool AllocConsole();

AllocConsole,可以创建控制台窗口。bool返回值,true表示之前没有控制台窗口、创建成功,false表示已经有控制台窗口、创建失败。

C# 当前进程是否有控制台窗口的相关教程结束。

《C# 当前进程是否有控制台窗口.doc》

下载本文的Word格式文档,以方便收藏与打印。