96 lines
3.0 KiB
C#
96 lines
3.0 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
|
|
namespace Ink_Canvas.Helpers
|
|
{
|
|
public static class DebugConsoleManager
|
|
{
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
private static extern bool AllocConsole();
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
private static extern bool FreeConsole();
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
private static extern IntPtr GetConsoleWindow();
|
|
|
|
[DllImport("user32.dll")]
|
|
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
|
|
|
|
[DllImport("user32.dll")]
|
|
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
|
|
|
|
[DllImport("user32.dll")]
|
|
private static extern bool DeleteMenu(IntPtr hMenu, uint uPosition, uint uFlags);
|
|
|
|
[DllImport("kernel32.dll")]
|
|
private static extern bool SetConsoleTitle(string lpConsoleTitle);
|
|
|
|
private const int SW_HIDE = 0;
|
|
private const int SW_SHOW = 5;
|
|
private const uint SC_CLOSE = 0xF060;
|
|
private const uint MF_BYCOMMAND = 0x00000000;
|
|
|
|
private static bool _allocated;
|
|
|
|
public static bool IsVisible { get; private set; }
|
|
|
|
public static void Show()
|
|
{
|
|
try
|
|
{
|
|
if (!_allocated)
|
|
{
|
|
if (GetConsoleWindow() == IntPtr.Zero)
|
|
{
|
|
if (!AllocConsole()) return;
|
|
}
|
|
_allocated = true;
|
|
|
|
Console.OutputEncoding = Encoding.UTF8;
|
|
SetConsoleTitle("InkCanvasForClass - Debug Console");
|
|
|
|
// 移除关闭菜单,避免用户点 X 时直接结束进程
|
|
var hWnd = GetConsoleWindow();
|
|
if (hWnd != IntPtr.Zero)
|
|
{
|
|
var hMenu = GetSystemMenu(hWnd, false);
|
|
if (hMenu != IntPtr.Zero) DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var hWnd = GetConsoleWindow();
|
|
if (hWnd != IntPtr.Zero) ShowWindow(hWnd, SW_SHOW);
|
|
}
|
|
IsVisible = true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
System.Diagnostics.Debug.WriteLine($"[DebugConsoleManager] Show failed: {ex.Message}");
|
|
}
|
|
}
|
|
|
|
public static void Hide()
|
|
{
|
|
try
|
|
{
|
|
var hWnd = GetConsoleWindow();
|
|
if (hWnd != IntPtr.Zero) ShowWindow(hWnd, SW_HIDE);
|
|
IsVisible = false;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
System.Diagnostics.Debug.WriteLine($"[DebugConsoleManager] Hide failed: {ex.Message}");
|
|
}
|
|
}
|
|
|
|
public static void WriteLine(string line)
|
|
{
|
|
if (!IsVisible) return;
|
|
try { Console.WriteLine(line); }
|
|
catch { }
|
|
}
|
|
}
|
|
} |