using Azylee.Core.DataUtils.CollectionUtils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace Azylee.Core.WindowsUtils.ConsoleUtils
{
///
/// 控制台输出工具
///
public static class Cons
{
const string LOG_FORMAT = "{0} {1} ";
const string TIME_FORMAT = "HH:mm:ss.fff";
///
/// 输出换行内容(advanced 高级版)
///
/// 内容
/// 文字颜色
public static void Log(string value, ConsColorMode mode = ConsColorMode.Default)
{
ConsoleColor headcolor = ConsoleColor.White, headbgcolor = ConsoleColor.DarkRed;
ConsoleColor bodycolor = ConsoleColor.White, bodybgcolor = ConsoleColor.DarkRed;
#region 设置内容颜色,格式化内容
switch (mode)
{
case ConsColorMode.Default: bodycolor = ConsoleColor.Gray; bodybgcolor = ConsoleColor.Black; break;
case ConsColorMode.Muted: bodycolor = ConsoleColor.Gray; bodybgcolor = ConsoleColor.DarkGray; break;
case ConsColorMode.Primary: bodycolor = ConsoleColor.White; bodybgcolor = ConsoleColor.DarkGray; break;
case ConsColorMode.Secondary: bodycolor = ConsoleColor.Cyan; bodybgcolor = ConsoleColor.DarkGray; break;
case ConsColorMode.Success: bodycolor = ConsoleColor.Green; bodybgcolor = ConsoleColor.DarkGray; break;
case ConsColorMode.Info: bodycolor = ConsoleColor.Blue; bodybgcolor = ConsoleColor.DarkGray; break;
case ConsColorMode.Warning: bodycolor = ConsoleColor.Yellow; bodybgcolor = ConsoleColor.DarkGray; break;
case ConsColorMode.Danger: bodycolor = ConsoleColor.Red; bodybgcolor = ConsoleColor.DarkGray; break;
case ConsColorMode.Dark: bodycolor = ConsoleColor.White; bodybgcolor = ConsoleColor.Black; break;
case ConsColorMode.Light: bodycolor = ConsoleColor.Black; bodybgcolor = ConsoleColor.White; break;
}
value = FormatLine(value);
#endregion
#region 输出内容
SetColor(headcolor, headbgcolor);
Write(string.Format(LOG_FORMAT, DateTime.Now.ToString(TIME_FORMAT), ">"));
SetColor(bodycolor, bodybgcolor);
Write(value);
WriteLine("");
ResetColor();
#endregion
}
///
/// 输出内容
///
/// 内容
/// 文字颜色
/// 背景颜色
public static void Write(string value)
{
try { Console.Write(value); } catch { }
}
///
/// 输出换行内容
///
/// 内容
/// 文字颜色
/// 背景颜色
public static void WriteLine(string value)
{
try { Console.WriteLine(value); } catch { }
}
public static string FormatLine(string value)
{
string s = value;
try
{
s = s.Replace("\n\r", "\n").Replace("\r\n", "\n").Replace("\r", "\n");
string[] lines = s.Split(new[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);
s = String.Join($"{Environment.NewLine}{new string(' ', 18)}L> ", lines);
}
catch { s = value; }
return s;
}
public static void SetColor(ConsoleColor color, ConsoleColor bgcolor)
{
try
{
Console.ForegroundColor = color;
Console.BackgroundColor = bgcolor;
}
catch { }
}
public static void ResetColor()
{
try
{
Console.ResetColor();
}
catch { }
}
#region Console 开启/关闭 API
///
/// 启用系统控制台输出
///
///
[DllImport("kernel32.dll")]
public static extern Boolean AllocConsole();
///
/// 关闭系统控制台
///
///
[DllImport("kernel32.dll")]
public static extern Boolean FreeConsole();
#endregion
}
}