控制台着色和更改标题






2.35/5 (11投票s)
2004年10月13日
1分钟阅读

35682

410
本文档解释了如何更改控制台应用程序中文本的前景色和背景色。它还解释了如何更改控制台窗口的标题以及 Win32 API 的使用。
引言
在使用 C# 控制台应用程序时,通常会显示黑色背景和白色前景色。我们可以使用 Win32 API SetConsoleTextAttribute
更改控制台应用程序的前景色和背景色。
SetConsoleTextAttribute
接受两个参数:
- 控制台屏幕缓冲区的句柄。
- 字符属性。
BOOL SetConsoleTextAttribute( HANDLE hConsoleOutput, WORD wAttributes );
我们可以使用 Win32 API 的另一个函数 GetStdHandle()
获取控制台屏幕缓冲区的句柄,该函数接受一个参数并返回输入、输出或错误设备的句柄。我们将 -10 作为输入参数,-11 作为输出参数,-12 作为错误设备参数传递给 GetStdHandle
函数。我们拥有前景色和背景色的属性,例如前景色蓝色为 0x0001,背景色蓝色为 0x0010。
如何在 C# 中使用 Win32 API 函数
首先,使用 DllImport
属性声明该函数。API 函数必须声明为 static extern
。
让我们开始一个示例
using System;
using System.Runtime.InteropServices; // for DllImport attribute
namespace color_console
{
class Class1
{
static void Main(string[] args)
{
Class1 c =new Class1();
c.change();
}
[DllImport("kernel32.dll", SetLastError=true)]
public static extern bool SetConsoleTextAttribute(
IntPtr hConsoleOutput,
CharacterAttributes wAttributes);
/* declaring the setconsoletextattribute function*/
[DllImport("kernel32.dll")]
public static extern IntPtr GetStdHandle(int nStdHandle);
/*declaring the getstdhandle funtion to get thehandle
that would be used in setConsoletextattribute function */
void change()
{
IntPtr hOut; /* declaring variable to get handle*/
hOut= GetStdHandle(-11);/* -11 is sent for output device*/
/*Displaying text in different colors and background colors*/
SetConsoleTextAttribute(hOut, CharacterAttributes.FOREGROUND_BLUE );
Console.WriteLine(" Subhan ALLAH ");
SetConsoleTextAttribute(hOut, CharacterAttributes.BACKGROUND_RED);
Console.WriteLine(" Alkhamdolillah ");
SetConsoleTextAttribute(hOut, CharacterAttributes.BACKGROUND_GREEN );
Console.WriteLine(" Allah O Akbar ");
SetConsoleTextAttribute(hOut, CharacterAttributes.FOREGROUND_RED );
Console.WriteLine(" Pakistan ");
}
/* This enumeration lists all of the character attributes.
You can combine attributes to achieve specific effects.*/
public enum CharacterAttributes
{
FOREGROUND_BLUE = 0x0001,
FOREGROUND_GREEN = 0x0002,
FOREGROUND_RED = 0x0004,
FOREGROUND_INTENSITY = 0x0008,
BACKGROUND_BLUE = 0x0010,
BACKGROUND_GREEN = 0x0020,
BACKGROUND_RED = 0x0040,
BACKGROUND_INTENSITY = 0x0080,
COMMON_LVB_LEADING_BYTE = 0x0100,
COMMON_LVB_TRAILING_BYTE = 0x0200,
COMMON_LVB_GRID_HORIZONTAL = 0x0400,
COMMON_LVB_GRID_LVERTICAL = 0x0800,
COMMON_LVB_GRID_RVERTICAL = 0x1000,
COMMON_LVB_REVERSE_VIDEO = 0x4000,
COMMON_LVB_UNDERSCORE = 0x8000
}
}
}
更改控制台标题
更改控制台标题也更容易,只需使用 SetConsoleTitle()
函数并提供一个 string
作为参数,这将成为控制台的标题。您可以轻松地做到这一点
[DllImport("kernel32.dll")
public static extern bool SetConsoleTitle(String lpConsoleTitle);
首先,声明 SetConsoleTitle
函数,然后使用它
SetConsoleTitle(" ALlah O Akbar ... ");
因此,您已经了解了我们如何在 C# 中轻松使用 Win32 API,并可以执行 .NET Framework 未提供的许多操作。我们还可以使用 Win32 API 更改控制台应用程序的字体和光标。