windows下c#控制台程序设置标题、禁用关闭按钮,关闭快速编辑模式、插入模式,指定文字颜色等的操作
#region 设置控制台标题 禁用关闭按钮
[DllImport("user32.dll", EntryPoint = "FindWindow")]
extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "GetSystemMenu")]
extern static IntPtr GetSystemMenu(IntPtr hWnd, IntPtr bRevert);
[DllImport("user32.dll", EntryPoint = "RemoveMenu")]
extern static IntPtr RemoveMenu(IntPtr hMenu, uint uPosition, uint uFlags);
static void DisbleClosebtn()
{
IntPtr windowHandle = FindWindow(null, "控制台标题");
IntPtr closeMenu = GetSystemMenu(windowHandle, IntPtr.Zero);
uint SC_CLOSE = 0xF060;
RemoveMenu(closeMenu, SC_CLOSE, 0x0);
}
protected static void CloseConsole(object sender, ConsoleCancelEventArgs e)
{
Environment.Exit(0);
}
#endregion
关闭快速编辑模式、插入模式
const int STD_INPUT_HANDLE = -10;
const uint ENABLE_QUICK_EDIT_MODE = 0x0040;
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern IntPtr GetStdHandle(int hConsoleHandle);
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint mode);
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint mode);
public static void DisbleQuickEditMode()
{
IntPtr hStdin = GetStdHandle(STD_INPUT_HANDLE);
uint mode;
GetConsoleMode(hStdin, out mode);
mode &= ~ENABLE_QUICK_EDIT_MODE;//移除快速编辑模式
mode &= ~ENABLE_INSERT_MODE; //移除插入模式
SetConsoleMode(hStdin, mode);
}
设置控制台指定文字颜色
static void WriteColorLine(string str, ConsoleColor colorF,ConsoleColor colorB)
{
ConsoleColor currentForegroundColor = Console.ForegroundColor;
ConsoleColor currentBackgroundColor = Console.BackgroundColor;
Console.ForegroundColor = colorF;
Console.BackgroundColor = colorB;
Console.WriteLine(str);
Console.ForegroundColor = currentForegroundColor;
Console.BackgroundColor = currentBackgroundColor;
}
public static void MyColorConsoleWrite()
{
ConsoleColor colorB = ConsoleColor.Green;//背景色绿色
ConsoleColor colorF = ConsoleColor.Red;//字体色红色
string sMesg = "注意! 我是有颜色的";
WriteColorLine(sMesg, colorF,colorB);
}
控制台颜色的举例
using System;
class Sample
{
public static void Main()
{
String nl = Environment.NewLine;
String[] colorNames = ConsoleColor.GetNames(typeof(ConsoleColor));
// ---------------------------------------------------------------------------------------
Console.WriteLine("{0}All the foreground colors on a constant black background.", nl);
Console.WriteLine(" (Black on black is not readable.){0}", nl);
for (int x = 0; x < colorNames.Length; x++)
{
Console.Write("{0,2}: ", x);
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), colorNames[x]);
Console.Write("This is foreground color {0}.", colorNames[x]);
Console.ResetColor();
Console.WriteLine();
}
// ---------------------------------------------------------------------------------------
Console.WriteLine("{0}A constant white foreground on all the background colors.", nl);
Console.WriteLine(" (White on white is not readable.){0}", nl);
for (int x = 0; x < colorNames.Length; x++)
{
Console.Write("{0,2}: ", x);
Console.ForegroundColor = ConsoleColor.White;
Console.BackgroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), colorNames[x]);
Console.Write("This is background color {0}.", colorNames[x]);
Console.ResetColor();
Console.WriteLine();
}
// ---------------------------------------------------------------------------------------
}
}
这个程序的运行效果如下所示:
从上图中可以看出,ConsoleColor 枚举表示十六种不同的颜色。
=====================================
Console的方法和属性表:
方法
Beep 已重载。 通过控制台扬声器播放提示音。
Clear 清除控制台缓冲区和相应的控制台窗口的显示信息。
MoveBufferArea 已重载。 将屏幕缓冲区的指定源区域复制到指定的目标区域。
OpenStandardError 已重载。 获取标准错误流。
OpenStandardInput 已重载。 获取标准输入流。
OpenStandardOutput 已重载。 获取标准输出流。
Read 从标准输入流读取下一个字符。
ReadKey 已重载。 获取用户按下的下一个字符或功能键。
ReadLine 从标准输入流读取下一行字符。
ResetColor 将控制台的前景色和背景色设置为默认值。
SetBufferSize 将屏幕缓冲区的高度和宽度设置为指定值。
SetCursorPosition 设置光标位置。
SetError 将 Error 属性设置为指定的 TextWriter 对象。
SetIn 将 In 属性设置为指定的 TextReader 对象。
SetOut 将 Out 属性设置为指定的 TextWriter 对象。
SetWindowPosition 设置控制台窗口相对于屏幕缓冲区的位置。
SetWindowSize 将控制台窗口的高度和宽度设置为指定值。
Write 已重载。 将指定值的文本表示形式写入标准输出流。
WriteLine 已重载。 将指定的数据(后跟当前行终止符)写入标准输出流。
属性:
BackgroundColor 获取或设置控制台的背景**ufferHeight 获取或设置缓冲区的高度。
BufferWidth 获取或设置缓冲区的宽度。
CapsLock 获取一个值,该值指示 Caps Lock 键盘切换键是打开的还是关闭的。
CursorLeft 获取或设置光标在缓冲区中的列位置。
CursorSize 获取或设置光标在字符单元格中的高度。
CursorTop 获取或设置光标在缓冲区中的行位置。
CursorVisible 获取或设置一个值,用以指示光标是否可见。
Error 获取标准错误输出流。
ForegroundColor 获取或设置控制台的前景色。
In 获取标准输入流。
InputEncoding 获取或设置控制台用于读取输入的编码。
KeyAvailable 获取一个值,该值指示按键操作在输入流中是否可用。
LargestWindowHeight 根据当前字体和屏幕分辨率获取控制台窗口可能具有的最大行数。
LargestWindowWidth 根据当前字体和屏幕分辨率获取控制台窗口可能具有的最大列数。
NumberLock 获取一个值,该值指示 Num Lock 键盘切换键是打开的还是关闭的。
Out 获取标准输出流。
OutputEncoding 获取或设置控制台用于写入输出的编码。
Title 获取或设置要显示在控制台标题栏中的标题。
TreatControlCAsInput 获取或设置一个值,该值指示是将修改键 Control 和控制台键 C 的组合 (Ctrl+C) 视为普通输入,还是视为由操作系统处理的中断。
WindowHeight 获取或设置控制台窗口区域的高度。
WindowLeft 获取或设置控制台窗口区域的最左边相对于屏幕缓冲区的位置。
WindowTop 获取或设置控制台窗口区域的最顶部相对于屏幕缓冲区的位置。
WindowWidth 获取或设置控制台窗口的宽度。
====================================
主要参考来源:
https://www.cnblogs.com/skyivben/archive/2011/01/17/1937191.html
https://blog.csdn.net/ahua001/article/details/81189308