(CMD窗口中输入help color命令
首先加上头文件:
include"stdlib.h"
在再主程序中加入
system("color f0"); (黑色字体白色背景)
system("cls");
你可以把color后面的f0换成00-ff间的任一个数,
C:\Documents and Settings\Administrator>help color
设置默认的控制台前景和背景颜色。
COLOR [attr]
attr 指定控制台输出的颜色属性
颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为前景。每个数字可以为以下任何值之一:
0 = 黑色 8 = 灰色
1 = 蓝色 9 = 淡蓝色
2 = 绿色 A = 淡绿色
3 = 湖蓝色 B = 淡浅绿色
4 = 红色 C = 淡红色
5 = 紫色 D = 淡紫色
6 = 黄色 E = 淡黄色
7 = 白色 F = 亮白色 )每种计算机都有自己的处理屏幕的方法。这是非常必要的,如果完全局限于一种特定的标准,那么各项事业将会停滞不前。然而,当你试图为不同的计算机编写程序时,或者试图编写必须通过电话线进行通信的程序时,这种差别会带来很大的问题。为了解决这个问题,便产生了ANSI标准。
ANSI标准试图为程序使用视频终端来完成某些标准任务而设定一个基本框架,例如以不同颜色打印文本,移动光标,清屏,等等。它通过定义一些特殊的字符序列来达到这个目的——当这些字符序列被送到屏幕上时,它们会以特殊的方式对屏幕起作用。
然而,在有些计算机上,当你按正常的方式把这些字符序列送到屏幕上时,你所看到的将是这些字符本身,而不是它们要产生的效果。为了解决这个问题,你需要装入一个程序,通过它来检查送往屏幕的每一个字符,并删去其中的特殊字符(这样它们就不会被打印出来),然后实现这些特殊字符所指示的功能。
在以MS-DOS为操作系统的计算机上,这个程序被称为ANSI.SYS。ANSI.SYS必须在计算机启动时被装入,为此你可以在CONFIG.SYS文件中加入下述语句:
DRIVER=ANSI.SYS
在实际情况中,ANSI.SYS驱动程序可能在别的目录下,这时你必须清楚地写出路径全名,例如:
driver=c:\sys\dos\ansi.sys
17.2. 怎样通过ANSI驱动程序来清屏?
这种操作可以通过"<esc>[2J”来完成,下面的程序演示了这一点:
# include <stdio. h>
main ( )
{
printf( " %c[2JNice to have an empty screen. \n" , 27 ) ;
return ( 0 );
17.3. 样通过ANSI驱动程序来存储光标位置?
这种操作可以通过"<esc>[s"来完成,下面的程序演示了这一点:
#include<stdio.h>
main()
{
printf( "Cursor position is %c[s \n" , 27 );
printf ( "Interrupted ! \n" ) ;
printf( "%c[uSAVED! !\n" , 27 );
return( 0 );
}
17.4. 怎样通过ANSI驱动程序来恢复光标位置?
这种操作可以通过“<esc>[u”来完成,请参见17.15中的例子。
17.5. 怎样通过ANSI驱动程序来改变屏幕颜色?
完成这项任务的方法是先改变当前文本的背景色,然后清屏。下面的程序就是一个例子:
# include <stdio. h>
int main ( )
{
printf( " %0c[43;32m%c[2JOhh, pretty colors!\n", 27 , 27 ) ;
return( 0 );
}
17.6. 怎样通过ANSI驱动程序来写带有颜色的文本?
文本的颜色是可以改变的文本属性之一。文本的属性可以通过“(esc>[<attr>m”来改变。在ANSI字符序列中,文本的属性是用数字来表示的。你可以用一条命令来设置多种属性,各种属性之间用分号分隔开,例如“<esc>[<attr>;<attr>m"。下面的程序演示了这一点:
# include <stdio. h>
main ( )
{
printf("%c[32;44mPsychedelic, man.\n" , 27 );
return( 0 );
}
以下列出了ANSI驱动程序所支持的属性,你的显示器可能不支持其中的某些选项:
1—High Intensity(高强度)
2一Low Intensity(低强度)
3一Italic(斜体)
4一Underline(下划线)
5一Blinking(闪烁)
6一Fast Blingking(快闪)
7一Reverse(反转)
8一Invisible(不可见)
前景色:
30一Black(黑)
31一Red(红)
32一Green(绿)
33一Yellow(黄)
34一Blue(蓝)
35一Magenta(洋红)
36一Cyan(青蓝)
37一White(白)
背景色:
40—Black(黑)
41一Red(红)
42一Green(绿)
43一Yellow(黄)
44一Blue(蓝)
45一Magenta(洋红)
46一Cyan(青蓝)
47一White(白)
17.7. 怎样通过ANSI驱动程序来移动光标?
移动光标有两种方式:相对移动和绝对移动。相对移动是指相对于当前光标位置的移动,例如“将光标上移两格”。绝对移动是指相对于屏幕左上角的移动,例如“将光标移到第10行第5列”。
相对移动可按以下方式进行:
“<esc>[#a”,其中#表示上移的格数
“<esc>[#b”,其中#表示下移的格数
“<esc>[#c”,其中#表示右移的格数
“<esc>[#d”,其中#表示左移的格数
将光标移到绝对位置的方法是:
“<esc>[<row>;<col>H”,其中row和col分别表示目标位置所在的行数和列数。
批处理&&彩色文字
ANSI.SYS是MS-DOS中一个很有用的设备驱动程序,利用它,我们可以取得意想不到的显示效果。
注意:语法和 ANSI 转义序列中的大写字母必须按原样键入。
ANSI.SYS 定义了一系列函数,这些函数被用来改变显示图形、控制光标移动和键的重定义,ANSI.SYS 设备驱动程序支持转义序列的 ANSI,终端仿真,以便控制系统的屏幕和键盘。
该设备驱动程序必须由位于 CONFIG.SYS 文件中的DEVICE或DEVICEHIGH命令加载。
语法
DEVICE(HIGH)=[ 驱动器 :][ 路径 ]ANSI.SYS [/X] [/K]
参数
[ 驱动器 :][ 路径 ]
指定 ANSI.SYS 文件的位置。
选项
/X
重新映射 101 键键盘以外的扩展键。
/K
使 ANSI.SYS 文件将 101 键键盘当作 84 键键盘看待,这等价于命令 SWITCHES=/K。如果您通常使用
SWITCHES=/K命令,那么在使用ANSI.SYS 时,则需要使用选项 /K。
ANSI 转义序列中关于光标移动、图形和键盘的设置:
在下面的 ANSI 转义序列的列表中,缩写 ESC 代表 ASCII转义字符 27(1Bh),它位于每个转义序列的开始。
ESC[PL;PcH
光标位置:移动光标到指定的位置(坐标),如果不指定位置,光标将移动到起始位置,即屏幕的左上角(0 行,0 列)。
该转义序列与下面的光标位置转义序列的工作方式相同。
ESC[PL;Pcf
光标位置:与前面光标位置转义序列的工作方式相同。
ESC[PnA
上移光标:不改变列而将光标向上移动指定的行数。如果光标已在首行,则 ANSI.SYS 忽略这个序列。
ESC[PnB
下移光标:不改变列而将光标向下移动指定的行数。如果光标已经在最后一行,则 ANSI.SYS 忽略这个序列。
ESC[PnC
右移光标:不改变行而将光标向右移动指定的列数。如果光标已经在最右列,则 ANSI.SYS 忽略这个序列。
ESC[PnD
左移光标:不改变行而将光标向左移动指定的列数。如果光标已经在最左列,则 ANSI.SYS 忽略这个序列。
ESC[s
保存光标位置:保存当前光标位置。使用“恢复光标位置”序列,您可以将光标移动到保存的光标位置。
ESC[u
恢复光标位置:将光标位置返回到“保存光标位置”所储存的位置。
ESC[2J
清除显示:清除屏幕并将光标位置移到起始位置(0 行,0 列)。像cls
ESC[K
清除行:清除从光标所在位置到行尾的所有字符( 包括光标位置上的字符)。
ESC[Ps;...;Psm
设置图形模式:调用由下列数值指定的图形函数,在该序列再次出现之前,这些被指定的函数保持激活状态。图形模式改变屏幕上显示的颜色和文本(例如:黑体和下划线字体)属性。
文本属性
值功能
------------------------------------
0 无属性
1 黑体
4 下划线字体(仅适用于单色显示适配器)
5 闪烁字体
7 反显字体
8 隐藏字体
前景色
值功能
------------------------------------
30 黑色
31 红色
32 绿色
33 黄色
34 蓝色
35 紫红色
36 青色
37 白色
背景色
值功能
------------------------------------
40 黑色
41 红色
42 绿色
43 黄色
44 蓝色
45 紫红色
46 青色
47 白色
参数 30 到 47 符合 ISO 6429 标准。
ESC[=psh
设置模式:改变屏幕宽度或类型,使之成为下列数值所指定的一种。
0 40 x 148 x 25 单色(文本)
1 40 x 148 x 25 彩色(文本)
2 80 x 148 x 25 单色(文本)
3 80 x 148 x 25 彩色(文本)
4 320 x 148 x 200 4 色(图形)
5 320 x 148 x 200 单色(图形)
6 640 x 148 x 200 单色(图形)
7 启用换行功能
13 320 x 148 x 200 彩色(图形)
14 640 x 148 x 200 彩色(16 色图形)
15 640 x 148 x 350 单色(2 色图形)
16 640 x 148 x 350 彩色(16 色图形)
17 640 x 148 x 480 单色(2 色图形)
18 640 x 148 x 480 彩色(16 色图形)
19 320 x 148 x 200 彩色(256 色图形)
ESC[=Psl
重新设置模式:使用“设置模式”序列所用的同一值来重新设置模式,但是 7 除外,使用 7 将使换行功能失效。
注意:该转义序列中的最后一个字符是个小写 L。
这些都要在EDIT中完成,即开始--运行edit,当然在edit里构建所需的ESC字符后再转到记事本编辑比较方便
在用EDIT编辑批处理文件时可用下列方法输入ESC字符:首先同时按下Ctrl和P键,然后按ESC此时屏幕出现一左箭头(说明:已输入了ESC字符,之后再按方括号键开始ANSI命令)
一定还有更好的方法edit太麻烦,大家都说说看法
如:
@echo off
chcp 437>nul&&graftabl 936>nul
if not exist CONFIG.NT copy %WinDir%\System32\CONFIG.NT CONFIG.NT
attrib +h CONFIG.NT
::调用ANSI.sys
@cls
echo DEVICE=%WinDir%\System32\ANSI.SYS /x >%WinDir%\System32\CONFIG.NT
@echo.
command /cecho
::指定背景色,缺省状态为黑色,如:command /cecho [1;45m 则背景为紫红色
@echo.
@echo.
command /cecho [1;31m
@echo.
command /cecho [1;37m
@echo.
command /cecho [1;32m
@echo.
command /cecho [1;33m
@echo.
command /cecho [1;35m
@echo.
command /cecho [1;36m
@echo.
command /cecho [1;37m
@echo.
command /cecho [1;31m
@echo.
command /cecho [1;37m
@echo.
command /cecho [1;36m
@echo.
command /cecho [1;32m
@echo.
command /cecho [1;33m 结束
pause>nul
copy CONFIG.NT %WinDir%\System32\CONFIG.NT
del CONFIG.NT
exit
代码:
效果
prompt $e[0;32;40m$p$g
ANSI.SYS是MS-DOS中一个很有用的设备驱动程序,利用它,我们可以取得意想不到的显示效果。那么,它该如何使用呢?下面就来介绍一下。
注意:在本节中,语法和 ANSI 转义序列中的大写字母必须按原样键入。
ANSI.SYS 定义了一系列函数,这些函数被用来改变显示图形、控制光标移动和键的重定义,
ANSI.SYS 设备驱动程序支持转义序列的 ANSI 终端仿真,以便控制系统的屏幕和键盘。
该设备驱动程序必须由位于 CONFIG.SYS 文件中的DEVICE或DEVICEHIGH命令加载。
语法
DEVICE(HIGH)=[ 驱动器 :][ 路径 ]
ANSI.SYS [/X] [/K] [/R]
参数
[ 驱动器 :][ 路径 ]
指定
ANSI.SYS 文件的位置。
选项
/X
重新映射 101 键键盘以外的扩展键。
/K
使
ANSI.SYS 文件将 101 键键盘当作 84 键键盘看待,这等价于命令 SWITCHES=/K。如果您通常使用 SWITCHES=/K命令,那么在使用
ANSI.SYS 时,则需要使用选项 /K。
/R
当
ANSI.SYS 与屏幕阅读程序(该程序使残疾人更易于使用计算机)一起使用时,此选项用来调整行的滚动,以便提高可读性。
在 ANSI 转义序列中使用的参数:
Pn
数字参数,用来指定一个十进制数。
Ps
可选参数。指定一个十进制数,用于选择函数。您可以指定多个函数,必须用分号 (;) 将参数隔开。
PL
行参数。指定一个十进制数,它代表显示器或其它设备上的一行。
Pc
列参数。指定一个十进制数,它代表屏幕或其它设备上的一列。
ANSI 转义序列中关于光标移动、图形和键盘的设置:
在下面的 ANSI 转义序列的列表中,缩写 ESC 代表 ASCII转义字符 27(1Bh),它位于每个转义序列的开始。
ESC[PL;PcH
光标位置:移动光标到指定的位置(坐标),如果不指定位置,光标将移动到起始位置,即屏幕的左上角(0 行,0 列)。
该转义序列与下面的光标位置转义序列的工作方式相同。
ESC[PL;Pcf
光标位置:与前面光标位置转义序列的工作方式相同。
ESC[PnA
上移光标:不改变列而将光标向上移动指定的行数。如果光标已在首行,则
ANSI.SYS 忽略这个序列。
ESC[PnB
下移光标:不改变列而将光标向下移动指定的行数。如果光标已经在最后一行,则
ANSI.SYS 忽略这个序列。
ESC[PnC
右移光标:不改变行而将光标向右移动指定的列数。如果光标已经在最右列,则
ANSI.SYS 忽略这个序列。
ESC[PnD
左移光标:不改变行而将光标向左移动指定的列数。如果光标已经在最左列,则
ANSI.SYS 忽略这个序列。
ESC[s
保存光标位置:保存当前光标位置。使用“恢复光标位置”序列,您可以将光标移动到保存的光标位置。
ESC[u
恢复光标位置:将光标位置返回到“保存光标位置”所储存的位置。
ESC[2J
清除显示:清除屏幕并将光标位置移到起始位置(0 行,0 列)。
ESC[K
清除行:清除从光标所在位置到行尾的所有字符( 包括光标位置上的字符)。
ESC[Ps;...;Psm
设置图形模式:调用由下列数值指定的图形函数,在该序列再次出现之前,这些被指定的函数保持激活状态。图形模式改变屏幕上显示的
颜色和文本(例如:黑体和下划线字体)属性。
文本属性
值功能
------------------------------------
0 无属性
1 黑体
4 下划线字体(仅适用于单色显示适配器)
5 闪烁字体
7 反显字体
8 隐藏字体
前景色
值功能
------------------------------------
30 黑色
31 红色
32 绿色
33 黄色
34 蓝色
35 紫红色
36 青色
37 白色
背景色
值功能
------------------------------------
40 黑色
41 红色
42 绿色
43 黄色
44 蓝色
45 紫红色
46 青色
47 白色
参数 30 到 47 符合 ISO 6429 标准。
ESC[=psh
设置模式:改变屏幕宽度或类型,使之成为下列数值所指定的一种。
0 40 x 148 x 25 单色(文本)
1 40 x 148 x 25 彩色(文本)
2 80 x 148 x 25 单色(文本)
3 80 x 148 x 25 彩色(文本)
4 320 x 148 x 200 4 色(图形)
5 320 x 148 x 200 单色(图形)
6 640 x 148 x 200 单色(图形)
7 启用换行功能
13 320 x 148 x 200 彩色(图形)
14 640 x 148 x 200 彩色(16 色图形)
15 640 x 148 x 350 单色(2 色图形)
16 640 x 148 x 350 彩色(16 色图形)
17 640 x 148 x 480 单色(2 色图形)
18 640 x 148 x 480 彩色(16 色图形)
19 320 x 148 x 200 彩色(256 色图形)
ESC[=Psl
重新设置模式:使用“设置模式”序列所用的同一值来重新设置模式,但是 7 除外,使用 7 将使换行功能失效。
注意:该转义序列中的最后一个字符是个小写 L。
ESC[code;string;...p
设置键盘字符串:将键盘键重新定义为指定的字符串。该转义序列的参数定义如下:
“code”是列于下表的一个或多个数值,这些数值代表键盘键和键的组合。当在命令中使用这些数值时,除了该序列要求的分号外,您还必须键入该表中显示的分号。括号中的代码在一些键盘上不存在,除非选项 /X 在
ANSI.SYS 的DEVICE 命令中被指定,否则,
ANSI.SYS 将不为这些键盘翻译括号中的代码。
“string”对于单个字符是 ASCII 代码,或者是包含在引号中的串。例如:65 和“A”都被用来代表大写字母 A。
要点:下表中的一些值并不是对于所有的计算机都有效,对于那些不同的数值,请检查您的计算机文档。
键代码 SHIFT+ 代码 CTRL+ 代码 ALT+ 代码
------------------------------------------------------------------
F1 0;59 0;84 0;94 0;104
F2 0;60 0;85 0;95 0;105
F3 0;61 0;86 0;96 0;106
F4 0;62 0;87 0;97 0;107
F5 0;63 0;88 0;98 0;108
F6 0;64 0;89 0;99 0;109
F7 0;65 0;90 0;100 0;110
F8 0;66 0;91 0;101 0;111
F9 0;67 0;92 0;102 0;112
F10 0;68 0;93 0;103 0;113
F11 0;133 0;135 0;137 0;139
F12 0;134 0;136 0;138 0;140
A 97 65 1 0;30
B 98 66 2 0;48
C 99 66 3 0;46
D 100 68 4 0;32
E 101 69 5 0;18
F 102 70 6 0;33
G 103 71 7 0;34
H 104 72 8 0;35
I 105 73 9 0;23
J 106 74 10 0;36
K 107 75 11 0;37
L 108 76 12 0;38
M 109 77 13 0;50
N 110 78 14 0;49
O 111 79 15 0;24
P 112 80 16 0;25
Q 113 81 17 0;16
R 114 82 18 0;19
S 115 83 19 0;31
T 116 84 20 0;20
U 117 85 21 0;22
V 118 86 22 0;47
W 119 87 23 0;17
X 120 88 24 0;45
Y 121 89 25 0;21
Z 122 90 26 0;44
1 49 33 -- 0;120
2 50 64 0 0;121
3 51 35 -- 0;122
4 52 36 -- 0;123
5 53 37 -- 0;124
6 54 94 30 0;125
7 55 38 -- 0;126
8 56 42 -- 0;126
9 57 40 -- 0;127
0 48 41 -- 0;129
- 45 95 31 0;130
= 61 43 -- 0;131
[ 91 123 27 0;26
] 93 125 29 0;27
92 124 28 0;43
; 59 58 -- 0;39
' 39 34 -- 0;40
, 44 60 -- 0;51
. 46 62 -- 0;52
/ 47 63 -- 0;53
` 96 126 -- 0;41
通 常,在DOS提示符下按ESC键时,屏幕会显示一个反斜杠(\)并把光标移到下一行.这时可以使用PROMPT命令.假如现在DOS提示符是$P$G,想 要清屏,就可键入: PROMPT=$E[2J $P$G 这里$E即表示按ESC键,然后再把提示符改回$P$G,不然在执行每条命令前就都要清屏了.
在用EDIT编辑批处理文件时可用下列方法输入ESC字符.首先同时按下Ctrl和P键 然后再按下作方括号,此时屏幕出现一左箭头(?说明已输入了ESC字符.之后必须放 开Ctrl再次按下方括号键开始ANSI命令.