很多不要求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函数——原理其实很简单是吧!