找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 77411|回复: 29

[其他] 为批处理实现高效彩色显示的小com程序

[复制链接]
发表于 2010-7-27 22:03:00 | 显示全部楼层 |阅读模式
  1. 为批处理实现高效彩色显示的小com程序(彩色显示引擎)

  2.     *********  所有功能已经在 xp3和win7 下通过测试  ***********

  3. ::////////////////////////////////////////////////////
  4. ::    syxq.com 使用方用和特殊显示语法定义规则
  5. ::   
  6. :: 调用方法:   syxq <[变量名] [变量名] [变量名] ....>
  7. ::    syxq.com 会根据指定的变量名,找到变量值,再解释其中的语句
  8. ::    变量值的语法如下:
  9. ::    第一个为功能代号:可以是0,1,2
  10. ::   
  11. ::    功能0,        把当前光标转到指定行列,例如(光标转到10行30列):
  12. ::    set cur=010$30
  13. ::    syxq.com cur
  14. ::   
  15. ::   
  16. ::   
  17. ::    功能1,sybc 功能
  18. ::    作用:在一行(无分号)或多行(有分号)或不连续位置(有分号冒号)输出
  19. ;     "$"        颜色  读取一个坐标颜色信息执行
  20. ;     ";"        换行  到下一行,与最后一次指定位置的列相同
  21. ;     "#"        跳过  仅改变颜色,不修改所在位置的原内容
  22. ;     ";:"        从新指定行列位置,
  23. ;     ";@"        后定义鼠标有效点击区
  24.                 @14550207L03        定义了点击左键有效
  25.                 @14550207R08        定义了点击右键有效
  26.       "/"后的字符为普通字符

  27.         10进制                ;:1122$33文本                :号 后为数字
  28.         16进制                ;:H1122$H3F文本                :号 后大写H
  29.         syxq变量        ;::1122$33文本                :后 为:号
  30.         变量取值        ;:XXYY$MM文本                :后 为非数字,及以上字符为变量


  31.         如:
  32.         set sybc=1TEST;:1505$H3E[test1];:1530$H3E[test2];:1455$H3E[-----];[test3];[-----];@15050007L01;@15300007L02;@14550207L03;@14550207R08;
  33.         set key=5
  34.         syxq sybc key
  35. ::   
  36. ::   
  37. ::   
  38. ::    功能2,        在指定行列开始显示指定的颜色C的字符串,不影响光标位置
  39. ::    单个变量可以指定多项,项与项间用{}分开
  40. ::    例如(在5行7列开始显示蓝底白字31(16进制为:1f)的字符串“BAT高速彩显”)
  41. ::    set str=25$7$31$BAT高速彩显
  42. ::    syxq.com str
  43. ::    功能2连用:set str=25$7$31$BAT高速彩显{}8$4$86$Code By Netbenton


  44. *************  以下是  syxq.com 功能2增强  详细使用说明     ***************************

  45. 内部,寄存器,dh:行,dl:列,bh:画板色,bl:当前颜色(前景在低4位,背景在高4位)

  46. 在格式串 “25$7$31$BAT高速彩显” 中,2为功能号,5为行,7为列,31为画板色,
  47.          “BAT高速彩显”为要显示的字符串


  48. 一.1 显示字符串,不处理串内的所有功能字符

  49. /# 以/#后的字符作为界线,取消字符串的功能,如:/#:333:

  50. /@ 以/@后的字符作为界线,取消字符串的功能,并仅输出颜色 /@:333:

  51. /- 以/-后的字符作为界线,取消字符串的功能,并仅输出字符 /-:333:


  52. 一.2

  53. 一.2.1    /~0?x1.y1-x2.y2$        保存x1.y1  到 x2.y2 的屏幕信息   (已完成)
  54.           /~1?x1.y1-x2.y2$        恢复x1.y1  到 x2.y2 的屏幕信息
  55. 一.2.2
  56.   /~xx#0 重复xx 次 0 改变颜色
  57. 一.2.3
  58.   /~xx@0 重复xx 次 0 仅输出颜色
  59. 一.2.4
  60.   /~xx-0 重复xx 次 0 仅输出字符

  61. 一.2.5  大写的G
  62.   /Gxx?   喇叭发声频率值为:xx
  63.   /GI        初始化
  64.   /GB   让机箱喇叭开始发声
  65.   /GE   让机箱喇叭停止发声


  66. 一.3 跟其它,表示后面的作为特殊字符处理。
  67.   //  /{ /} /[ /] /; /, /?




  68. 二、 {HxxG...} 语法每个功能以{开始,以}结束,可以层层嵌套,如:{2${4~字符}}

  69. {HxxG...}    { 跟 "H"表示16进制,G表示功能符号
  70. {xxG... }    { 跟 数字表示10进制,G表示功能符号
  71. {{xx}G... }  { 跟{xx} 表示取变量xx的值,作为数值


  72. 二.1 代表的功能符有:
  73. {xx$...}   n下N行(dh+N) Dwon         ;push dx
  74. {xxU...}   u上N行(dh-N) Up        ;push dx
  75. {xxL...}   L左N列(dl+N) Left        ;push dx
  76. {xx~...}   R右N列(dl-N) Right        ;push dx
  77. {xx@...}   @改颜色                ;push bx
  78. {xx-...}   -改前景色                ;push bx
  79. {xx+...}   +改背景色                ;push bx

  80. {xx#...}   使用重复,重复执行xx次“...” 中的格式串

  81. {xx?...}   如果G位为:?号,则xx的值将代表以下子功能:

  82. {0?...}   0,插入显示,不影响后面的任何字符的位置
  83. {1?...}   1, 在光标位置输出显示,
  84. {2?...}   2, 取光标位置字符的颜色作为显示颜色                        (此项CPU占用大,原因在,int 10上)
  85. {3?xx$yy$...}        3,表示的重新指定显示位置。
  86.    
  87.    其它保留,暂作忽略处理

  88. 二.2 G如果是未知功能符号,保留,暂作忽略处理

  89.    
  90. 二.3
  91. {{变量名}G... } {{变量名}?... } 数值进行变量扩展取值

  92. 二.4
  93. {&变量名} 进行格式串变量扩展取值。

  94. {&abc:~1,4} 取变量abc的第1个字节开始,4 个字节

  95. {&&变量名} 进行格式串变量扩展取值。但其中的值将去掉所有符号的功能


  96. 二.5 计算式
  97. "{" 后跟空格 &0 为存放结果的空间

  98. { &0 =:1 + :2 }        进入计算模式
  99. { &0 =:3 + 11 }
  100. { &0 =:G * 2 }
  101. { &0 =:{&var} }



  102. 二.6
  103. { 跟其它符号,保留,暂作忽略处理。



  104. 三.单字功能:

  105. ; 换行,dh+1,且dh*宽+dl =>di
  106. , 换列,不改变dl,仅仅di+1
  107. [ 动态显示开始,以 ] 结束,已经解决和IF [...]间的层次嵌套问题
  108. { 一个有效区开始
  109. } 恢复,       
  110. ? 互换前背景,为什么不用{}格式呢,因为要恢复时,再来一次?就可以了。




  111.    
  112. 五、引入syxq用户数值型变量,共有256个,表示方法如下:

  113.         :0                10进制表示
  114.         :H0a                16进制表示
  115.         :{aa}                变量取值表示

  116.         :0~:256                公用变量(只要在整个窗口中的程序都可以访问)        值大小:0~ffff

  117.         :V0~V15                区域变量,遇到一次[],进入一个区域,里面的变量调用也有效  (未完成)
  118.                         区域变量的值占用双字,即可以用来存放变量名地址            (未完成)
  119.                

  120.         特殊值:
  121. 1,        :Gx        光标行
  122. 2,        :Gy        光标列
  123.         :Gc        光标所在字符的属性
  124.         ;Ga        光标所在字符的ascii码
  125. 3,        :Sx        当前鼠标行
  126. 4,        :Sy        当前鼠标列
  127. 5,        :SX        鼠标按下时的行(大写X)
  128. 6,        :SY        鼠标按下时的列(大写Y)
  129. 7,        :SK        鼠标按键        左键1        右键2        中键3(如果鼠标驱动有)
  130. 8,        :K        按键的ascii码
  131. 9,        :Vx        当前显示的行   (已完成)
  132.         :Vy        当前显示的列

  133.        

  134.        
  135. 六、引入条件执行语句:    “[”号后一个为界定符,?是可以变的
  136.     可用的条件符号有:< = >
  137.         /if :0 = 3 [? one ?]
  138.         /if :0 = 3 [? one ?  two ?]
  139.        
  140.        
  141. 七、引入,控制功能,如:
  142.         /CQ                退出
  143.         /CFxx?                置返回码
  144.         /CGxx.yy#         改变光标位置 (0功能也可以实现这个效果)
  145.        
  146.        
  147.         /CL n - m#        把n - m行送打印串 (只取同一颜色的)
  148.         /CTxx. n -m#        把n - m行送打印串,过虑掉xx属性的字符 (未完成)
  149.         /CZxx. n -m#        把n - m行送打印串,只要xx属性的字符   (未完成)


  150.         /C$ /$                送打印信息串,以/$结束,并且信息串支持以下特殊值:
  151.           /@xxh        显示一个数,按16进制
  152.           /@xxo        显示一个数,按10进制
  153.           /{变量名} 取变量的值来显示                (正在做)

  154.         /CK                等待输入一字符串                (未使用)

  155.         /CSxx.xx#        改变显示窗口在空间的位置        (未使用,大图模式)


  156. 八、{} 作为格式串分隔符
  157. *************  以上是 syxq.com 功能2 详细使用说明       ***************************



  158. ::    功能3,        把指定行列开始的N个字符转为指定的颜色C,不改变字符
  159. ::    单个变量可以指定多项,项与项间用空格分开
  160. ::    例如(从3行16列开始18个字符转为蓝底白字31(16进制为:1f):
  161. ::    set colo=33$16$31$18
  162. ::    xq.com colo
  163. ::    集合用法:set colo=33$16$31$18 4$14$41$9 6$40$51$2
  164. ::
  165. ::    功能3增强:改变了三行的颜色分别为,18 19 20个字符,注意 @ 符号不能用其它的代替
  166. ::    set colo=33$16$31$18@19@20
  167. ::   
  168. ::
  169. ::
  170. ::    功能4,       变量串功能,即串中原素以空格分开,再作为变量名,去搜索
  171. ::    set str=4strname1 strname2 strname3...
  172. ::
  173. ::    功能5 作以下增强:
  174. ::
  175. ::        功能5                 等待一按键,并开始,动态显示,有按键退出
  176. ::
  177. ::           50                开始动态显示,按键不退出,需要使用 /CQ 方式来退出
  178. ::
  179. ::           51filename        指定一个文件名,把要返回显示的信息串,写入到文件中。


  180.            51filename?开始/?结束         指定一个文件名返回缓存,写入的开始和结束位置。以/;代表回车符   (正在做)
  181.                         如果开始符找不到,以0计,如果结束符找不到,则无限制   (未完成)


  182. ::                如果不指定,则回显示出来,可用于管道操作
  183. ::
  184. ::          52                开始动态显示,不响应按键
  185. ::
  186. ::    功能6,指定框内:
  187. ::               HH
  188. ::    60$0-24$79$80#  所有颜色灰化,在HH位置指定运算数据
  189. ::    60$0-24$79$80$  所有颜色增亮,在HH位置指定运算数据
  190. ::    60$0-24$79$80=  所有颜色前背景交换,HH位置无意义
  191. ::    60$0-24$79$80@  所有字符清空,HH位置无意义
  192. ::
  193. ::        7功能,格式串库文件调入  
  194. ::
  195. ::           格式串:=7文件名
  196. ::
  197. ::        把指定文件名的内容调用内存,像批处理变量一样使用。
  198. ::        但是如果自定义变量名与bat的变量名相同是,以bat的变量有效。
  199. ::       
  200. ::        把一些常用的功能模板放到一个文件内。如游戏的地图,图标,窗口,动画,特效等。
  201. ::
  202. ::        这样可以减少批处理的环境变量空间的使用。
  203. ::
  204. ::
  205. ::        库文件中有效的变量定义以 :@ 开始,以 :# 结束
  206. ::        如文件内容可以这样:


  207. ...自定义变量列表...
  208. :@
  209. 窗口=^_^------^_^
  210. table={$╔{7#━}╗;{4#┃{14# }┃;}╚{7#━}╝}
  211. :#


  212. ::    功能9,为写示例文件增加的功能
  213. ::
  214. ::    9行$列$底色$颜色表$首尾符
  215. ::    98$2$31#23456abcde#{}显示功能字符串
  216. ::
  217. ::    "$"可以用其它非数字符号代替。#是固定的,{}号根据要显示的格式串来选择合适的字符
  218. ::    以达到理想的效果;
  219. ::    数值可为10进制或16进制(在前面加H),应小于255,颜色表为单字符的16进制字符
  220. ::    为了效率,并没有做过多的语法出错校对。使用时应严格按语法定义。
  221. ::   
  222. ::////////////////////////////////////////////////////

  223. =================   分项功能完   =========================

  224. ::    注意:
  225. ::    一次性可以指定多个变量,如:
  226. ::    xq.com cur colo str
  227. ::    可以一次性完成三种功能的定义,理论上可以指定N个变量,
  228. ::    只是受到com程序的参数只能有128个字符的限制。但是功能4可以祢补这一缺限。
复制代码
链接: https://pan.baidu.com/s/12U5p8uMGXwQYsiJx9P25LQ 提取码: n1y9

评分

参与人数 1技术 +1 收起 理由
lllsoslll + 1 好玩~~

查看全部评分

发表于 2010-7-27 23:08:41 | 显示全部楼层
附件中的演示没看到彩色效果!
彩虹灯只有光标在显示
是不是每次运行都要初始化?
发表于 2010-7-28 11:01:44 | 显示全部楼层
如上,确实挂了。如上,确实挂了。
 楼主| 发表于 2010-7-28 11:37:30 | 显示全部楼层
不可能呀,应该可以看到这个效果的~~~
发表于 2010-7-28 16:11:29 | 显示全部楼层
看到了楼主所说的效果
发表于 2010-7-28 22:01:49 | 显示全部楼层
  1. @echo off
  2. set str=25$7$31$BAT高速彩显
  3. xq.com str
  4. pause
复制代码
还是看不到演示效果,不知跟系统有没有关系?
本人系统:XPsp3
发表于 2010-8-17 17:03:35 | 显示全部楼层
@echo off
set str=25$7$31$BAT高速彩显
xq.com str
pause
这个肯定没效果
没有初始化...
改成
@echo off
echo Q|debug
title 稍等...
ping 543001>nul
set str=25$7$31$BAT高速彩显
xq.com str
pause
试试看

[ 本帖最后由 sl543001 于 2010-8-17 17:09 编辑 ]
发表于 2010-8-17 17:16:23 | 显示全部楼层
这网卡的...
加上(CHCP 437 &GRAFTABL 936)>NUL
 楼主| 发表于 2010-9-3 08:34:02 | 显示全部楼层
已经可以在win7下正常显示了~~~




dos7 下也可以正常显示,*** 但要记得设置足够的变量空间 否则会死机***

[ 本帖最后由 netbenton 于 2010-9-3 08:37 编辑 ]
 楼主| 发表于 2010-9-27 01:43:57 | 显示全部楼层
2010-09-26 更新,

增加动态显示功能~~~
可以在纯dos下使用~~~

请看一楼最新附件。

以下式子可以实现下面的图片效果

  1. set dqq=[37659560 \7\{11-3}7659560 \7\3{11-7}659560 \7\37{11-6}59560 \7\376{11-5}9560 \7\3765{11-9}560 \7\37659{11-5}60 \7\376595{11-6}0 \7\3765956{11-0} \7\{11-37659560} \7\]

  2. set "tab2={$╔{7#━}╗;{4#┃{16~┃};}╚{7#━}╝};{2~{{ts_n}-? {6#▄} ; {{bk_n}+? [{11-青}\12\{10-绿}\12\{13-红}\12\{14-黄}\12\]-[,>======\9\,=>=====\9\,==>====\9\,===>===\9\,====>==\9\,=====>=\9\,======>\9\]颜色示例- } ; ?{6#▄}? ;? {12-QQ:}{{bt_n}- {13-{&dqq}}}}}"

复制代码
[ 本帖最后由 netbenton 于 2010-9-27 08:08 编辑 ]
发表于 2010-9-28 20:19:44 | 显示全部楼层
关于这类工具,我提一个小问题:GUI下使用COM程序的话,就会退回DOS风格(短文件名,没有滚动条)。

win32下的这类工具挺少的(当然跟实用性有关),就推荐一个,好不好就看各人的喜好了。

colorcmd.exe
7.5 k, 附 ruby 源码。

---------------------------------------------------------------------------------------

关于批处理彩色显示字符串,我想大致是这个状况:
驱动 -> DOS程序 -> Windows程序

ANSI.SYS -> WRITEXT.EXE -> findstr /a -> colorcmd.exe (同行)
提前加载       *.com                  非特殊字符  ?.exe           
                     DOS风格                                EchoX.exe (自动换行)
                                                                    ColorX.exe + * (同行)
 楼主| 发表于 2010-9-29 11:52:38 | 显示全部楼层

re 楼上

colorcmd.exe 确实可以实现,一次彩色显示一个字符串了,可是我们想要的是更强大一点的功能。

com程序,确实有这个问题,固定了屏幕为80X25。但是也有个优点,就是程序很小。

syxq.com 能在等待按键的同时,能够显示11楼图片的效果。并且整屏刷新显示和准备接受键输入,
只需调用一次命令,效率可想而知了。

[ 本帖最后由 netbenton 于 2010-9-29 11:56 编辑 ]
发表于 2010-9-29 22:14:44 | 显示全部楼层
确实是各有各的 特点。
这类程序该又可以分为两类:一是(坐标)着色型,一是格式化(彩色)输出型。

好多COM程序要是能移植成Win32版本就好了~不过像驱动、驻留内存的就难了 :p
 楼主| 发表于 2010-10-4 19:58:52 | 显示全部楼层
上传了syxq.com 的使用语法演示程序,

利用syxq.com自身的功能编写的生动多彩的演示脚本,不但表现了syxq.com 在彩色文本显示上的强大,而且,只要运行看一次,就大体上可以知道syxq.com的使用方法了。
 楼主| 发表于 2010-11-5 10:39:43 | 显示全部楼层
不到2k三方,最新演示附件在一楼,本人旁边的所有机子均通过测试,若有不能通过请Q我37659560,我也想知道原因所在,以便改进。谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 05:08 , Processed in 0.023379 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表