[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

  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. 1, :Gx 光标行
  121. 2, :Gy 光标列
  122. :Gc 光标所在字符的属性
  123. ;Ga 光标所在字符的ascii码
  124. 3, :Sx 当前鼠标行
  125. 4, :Sy 当前鼠标列
  126. 5, :SX 鼠标按下时的行(大写X)
  127. 6, :SY 鼠标按下时的列(大写Y)
  128. 7, :SK 鼠标按键 左键1 右键2 中键3(如果鼠标驱动有)
  129. 8, :K 按键的ascii码
  130. 9, :Vx 当前显示的行   (已完成)
  131. :Vy 当前显示的列
  132. 六、引入条件执行语句:    “[”号后一个为界定符,?是可以变的
  133.     可用的条件符号有:< = >
  134. /if :0 = 3 [? one ?]
  135. /if :0 = 3 [? one ?  two ?]
  136. 七、引入,控制功能,如:
  137. /CQ 退出
  138. /CFxx? 置返回码
  139. /CGxx.yy# 改变光标位置 (0功能也可以实现这个效果)
  140. /CL n - m# 把n - m行送打印串 (只取同一颜色的)
  141. /CTxx. n -m# 把n - m行送打印串,过虑掉xx属性的字符 (未完成)
  142. /CZxx. n -m# 把n - m行送打印串,只要xx属性的字符   (未完成)
  143. /C$ /$ 送打印信息串,以/$结束,并且信息串支持以下特殊值:
  144.   /@xxh 显示一个数,按16进制
  145.   /@xxo 显示一个数,按10进制
  146.   /{变量名} 取变量的值来显示 (正在做)
  147. /CK 等待输入一字符串 (未使用)
  148. /CSxx.xx# 改变显示窗口在空间的位置 (未使用,大图模式)
  149. 八、{} 作为格式串分隔符
  150. *************  以上是 syxq.com 功能2 详细使用说明       ***************************
  151. ::    功能3,        把指定行列开始的N个字符转为指定的颜色C,不改变字符
  152. ::    单个变量可以指定多项,项与项间用空格分开
  153. ::    例如(从3行16列开始18个字符转为蓝底白字31(16进制为:1f):
  154. ::    set colo=33$16$31$18
  155. ::    xq.com colo
  156. ::    集合用法:set colo=33$16$31$18 4$14$41$9 6$40$51$2
  157. ::
  158. ::    功能3增强:改变了三行的颜色分别为,18 19 20个字符,注意 @ 符号不能用其它的代替
  159. ::    set colo=33$16$31$18@19@20
  160. ::   
  161. ::
  162. ::
  163. ::    功能4,       变量串功能,即串中原素以空格分开,再作为变量名,去搜索
  164. ::    set str=4strname1 strname2 strname3...
  165. ::
  166. ::    功能5 作以下增强:
  167. ::
  168. :: 功能5 等待一按键,并开始,动态显示,有按键退出
  169. ::
  170. ::    50 开始动态显示,按键不退出,需要使用 /CQ 方式来退出
  171. ::
  172. ::    51filename 指定一个文件名,把要返回显示的信息串,写入到文件中。
  173.            51filename?开始/?结束         指定一个文件名返回缓存,写入的开始和结束位置。以/;代表回车符   (正在做)
  174. 如果开始符找不到,以0计,如果结束符找不到,则无限制   (未完成)
  175. :: 如果不指定,则回显示出来,可用于管道操作
  176. ::
  177. ::   52 开始动态显示,不响应按键
  178. ::
  179. ::    功能6,指定框内:
  180. ::               HH
  181. ::    60$0-24$79$80#  所有颜色灰化,在HH位置指定运算数据
  182. ::    60$0-24$79$80$  所有颜色增亮,在HH位置指定运算数据
  183. ::    60$0-24$79$80=  所有颜色前背景交换,HH位置无意义
  184. ::    60$0-24$79$80@  所有字符清空,HH位置无意义
  185. ::
  186. :: 7功能,格式串库文件调入  
  187. ::
  188. ::    格式串:=7文件名
  189. ::
  190. :: 把指定文件名的内容调用内存,像批处理变量一样使用。
  191. :: 但是如果自定义变量名与bat的变量名相同是,以bat的变量有效。
  192. ::
  193. :: 把一些常用的功能模板放到一个文件内。如游戏的地图,图标,窗口,动画,特效等。
  194. ::
  195. :: 这样可以减少批处理的环境变量空间的使用。
  196. ::
  197. ::
  198. :: 库文件中有效的变量定义以 :@ 开始,以 :# 结束
  199. :: 如文件内容可以这样:
  200. ...自定义变量列表...
  201. :@
  202. 窗口=^_^------^_^
  203. table={$╔{7#━}╗;{4#┃{14# }┃;}╚{7#━}╝}
  204. :#
  205. ::    功能9,为写示例文件增加的功能
  206. ::
  207. ::    9行$列$底色$颜色表$首尾符
  208. ::    98$2$31#23456abcde#{}显示功能字符串
  209. ::
  210. ::    "$"可以用其它非数字符号代替。#是固定的,{}号根据要显示的格式串来选择合适的字符
  211. ::    以达到理想的效果;
  212. ::    数值可为10进制或16进制(在前面加H),应小于255,颜色表为单字符的16进制字符
  213. ::    为了效率,并没有做过多的语法出错校对。使用时应严格按语法定义。
  214. ::   
  215. ::////////////////////////////////////////////////////
  216. =================   分项功能完   =========================
  217. ::    注意:
  218. ::    一次性可以指定多个变量,如:
  219. ::    xq.com cur colo str
  220. ::    可以一次性完成三种功能的定义,理论上可以指定N个变量,
  221. ::    只是受到com程序的参数只能有128个字符的限制。但是功能4可以祢补这一缺限。
复制代码
链接: https://pan.baidu.com/s/12U5p8uMGXwQYsiJx9P25LQ 提取码: n1y9
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
1

评分人数

附件中的演示没看到彩色效果!
彩虹灯只有光标在显示
是不是每次运行都要初始化?
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
有一种爱叫放弃

TOP

如上,确实挂了。如上,确实挂了。

TOP

不可能呀,应该可以看到这个效果的~~~
附件: 您需要登录才可以下载或查看附件。没有帐号?注册

TOP

看到了楼主所说的效果

TOP

  1. @echo off
  2. set str=25$7$31$BAT高速彩显
  3. xq.com str
  4. pause
复制代码
还是看不到演示效果,不知跟系统有没有关系?
本人系统:XPsp3
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
有一种爱叫放弃

TOP

@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 编辑 ]
SYBN QQ:354324773

TOP

这网卡的...
加上(CHCP 437 &GRAFTABL 936)>NUL
SYBN QQ:354324773

TOP

已经可以在win7下正常显示了~~~




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

[ 本帖最后由 netbenton 于 2010-9-3 08:37 编辑 ]

TOP

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 编辑 ]
附件: 您需要登录才可以下载或查看附件。没有帐号?注册

TOP

关于这类工具,我提一个小问题: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 + * (同行)
附件: 您需要登录才可以下载或查看附件。没有帐号?注册

TOP

re 楼上

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

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

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

[ 本帖最后由 netbenton 于 2010-9-29 11:56 编辑 ]

TOP

确实是各有各的 特点。
这类程序该又可以分为两类:一是(坐标)着色型,一是格式化(彩色)输出型。

好多COM程序要是能移植成Win32版本就好了~不过像驱动、驻留内存的就难了 :p

TOP

上传了syxq.com 的使用语法演示程序,

利用syxq.com自身的功能编写的生动多彩的演示脚本,不但表现了syxq.com 在彩色文本显示上的强大,而且,只要运行看一次,就大体上可以知道syxq.com的使用方法了。

TOP

不到2k三方,最新演示附件在一楼,本人旁边的所有机子均通过测试,若有不能通过请Q我37659560,我也想知道原因所在,以便改进。谢谢!

TOP

返回列表