如何动态隐藏/显示 WPF 应用程序的控制台窗口
你曾经是否想过在 WPF 应用程序运行起来后,可以动态打开/关闭控制台窗体。也就是说,你可以在 WPF 应用程序里,留一个后门,用于调试程序。在需要时,打开控制台窗口,查看后台监控数据;不需要时,关闭控制台窗口。
下面的方法应该可以满足你的需求:
- 将 WPF 应用程序输出类型设置为控制台应用程序,在 *.csproj 文件里可以看到如下配置。
<OutputType>Exe</OutputType>
- 添加 NativeConsole 类公开 C++ 函数。
public static class NativeConsole
{
[DllImport("kernel32.dll")]
public static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
public const int SW_HIDE = 0;
public const int SW_SHOW = 5;
public static void Show()
{
var handle = GetConsoleWindow();
ShowWindow(handle, SW_SHOW);
}
public static void Hide()
{
var handle = GetConsoleWindow();
ShowWindow(handle, SW_HIDE);
}
}
- 为了让 WPF 应用程序启动时,默认隐藏控制台窗口,可以在 App.xaml.cs 里重写 OnStartup 方法。
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
//隐藏控制台窗口
NativeConsole.Hide();
}
}
- 在你想显示/隐藏控制台窗口的地方调用下面的方法。
显示控制台窗口方法:
NativeConsole.Show();
隐藏控制台窗口方法:
NativeConsole.Hide();