控制台着色和更改标题






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 更改控制台应用程序的字体和光标。
