控制台也可以丰富多彩

很多无UI要求的软件常被开发成单调的控制台程序,本文介绍如何DIY一个花花绿绿的控制台程序。通过调用SetConsoleTextAttribute和GetStdHandle两个API函数,结合文本样式枚举,可设置不同的文本显示效果,让控制台程序焕然一新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多不要求UI的软件,我们都理所当然地想到将它开发成控制台程序。但是这样黑底白字的程序写多了,不但用户看得腻味,连开发人自己都觉得单调没趣了。嗯,你有没有考虑过写一个花花绿绿的控制台程序,给人焕然一新的感觉呢?来,跟着涕淌DIY一个:

Imports System
Imports System.Runtime.InteropServices

Module ModuleConsoleColors

    Sub Main()

        '定义一个变量来获得句柄
        Dim hOut As IntPtr
        '-11专门用于输出设备
        hOut = GetStdHandle(-11)

        '现在开始展示不同的文本设置啦!
        SetConsoleTextAttribute(hOut, TextAttributes.BACKGROUND_INTENSITY)
        Console.WriteLine("欢迎常来访问涕淌居:http://blog.youkuaiyun.com/gnudoyng :)")
        '注意,这条语句我传入的参数值是两个枚举值的和,因此它们的效果叠加了
        SetConsoleTextAttribute(hOut, &H9)
        Console.WriteLine("你一定能在涕淌居找到你喜欢的东西——I promise...")
        SetConsoleTextAttribute(hOut, TextAttributes.BACKGROUND_GREEN)
        Console.WriteLine("经常盯着电脑会损伤视力,所以请你多看看绿色的东西。")
        SetConsoleTextAttribute(hOut, TextAttributes.FOREGROUND_RED)
        Console.WriteLine("我再一次负责任地告诉你——There is NOTHING Visual Basic can't do!")
        SetConsoleTextAttribute(hOut, TextAttributes.BACKGROUND_BLUE)
        Console.WriteLine("我出生在中国东南的海边,所以我永远最喜欢蓝色...")

        '按任意键退出
        Console.Read()

    End Sub

    '声明SetConsoleTextAttribute函数
    Declare Function SetConsoleTextAttribute Lib "kernel32.dll" ( _
        ByVal hConsoleOutput As IntPtr, ByVal wAttributes As TextAttributes) As Boolean

    '声明GetStdHandle函数,以此来获取在SetConsoleTextAttribute函数中使用的句柄
    Declare Function GetStdHandle Lib "kernel32.dll" (ByVal nStdHandle As Integer) As IntPtr

    '文本样式的枚举,涕淌这里只是列出了几个最基本的
    '通过不同枚举值的叠加,你可以得到综合的样式
    '自己动手试试吧,哦对了,三原色的叠加原理你应该很清楚吧哈哈?

    Public Enum TextAttributes

        FOREGROUND_BLUE = &H1
        FOREGROUND_GREEN = &H2
        FOREGROUND_RED = &H4
        FOREGROUND_INTENSITY = &H8
        BACKGROUND_BLUE = &H10
        BACKGROUND_GREEN = &H20
        BACKGROUND_RED = &H40
        BACKGROUND_INTENSITY = &H80
        COMMON_LVB_LEADING_BYTE = &H100
        COMMON_LVB_TRAILING_BYTE = &H200
        COMMON_LVB_GRID_HORIZONTAL = &H400
        COMMON_LVB_GRID_LVERTICAL = &H800
        COMMON_LVB_GRID_RVERTICAL = &H1000
        COMMON_LVB_REVERSE_VIDEO = &H4000
        COMMON_LVB_UNDERSCORE = &H8000

    End Enum

End Module

呵呵,就是调用了两个API函数——原理其实很简单是吧!

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值