65.9K
CodeProject 正在变化。 阅读更多。
Home

控制台着色和更改标题

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.35/5 (11投票s)

2004年10月13日

1分钟阅读

viewsIcon

35682

downloadIcon

410

本文档解释了如何更改控制台应用程序中文本的前景色和背景色。它还解释了如何更改控制台窗口的标题以及 Win32 API 的使用。

引言

在使用 C# 控制台应用程序时,通常会显示黑色背景和白色前景色。我们可以使用 Win32 API SetConsoleTextAttribute 更改控制台应用程序的前景色和背景色。

SetConsoleTextAttribute 接受两个参数:

  1. 控制台屏幕缓冲区的句柄。
  2. 字符属性。
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 更改控制台应用程序的字体和光标。

© . All rights reserved.