标题: [其他] 为批处理实现高效彩色显示的小com程序 [打印本页]
作者: netbenton 时间: 2010-7-27 22:03 标题: 为批处理实现高效彩色显示的小com程序
- 为批处理实现高效彩色显示的小com程序(彩色显示引擎)
-
- ********* 所有功能已经在 xp3和win7 下通过测试 ***********
-
- ::////////////////////////////////////////////////////
- :: syxq.com 使用方用和特殊显示语法定义规则
- ::
- :: 调用方法: syxq <[变量名] [变量名] [变量名] ....>
- :: syxq.com 会根据指定的变量名,找到变量值,再解释其中的语句
- :: 变量值的语法如下:
- :: 第一个为功能代号:可以是0,1,2
- ::
- :: 功能0, 把当前光标转到指定行列,例如(光标转到10行30列):
- :: set cur=010$30
- :: syxq.com cur
- ::
- ::
- ::
- :: 功能1,sybc 功能
- :: 作用:在一行(无分号)或多行(有分号)或不连续位置(有分号冒号)输出
- ; "$" 颜色 读取一个坐标颜色信息执行
- ; ";" 换行 到下一行,与最后一次指定位置的列相同
- ; "#" 跳过 仅改变颜色,不修改所在位置的原内容
- ; ";:" 从新指定行列位置,
- ; ";@" 后定义鼠标有效点击区
- @14550207L03 定义了点击左键有效
- @14550207R08 定义了点击右键有效
- "/"后的字符为普通字符
-
- 10进制 ;:1122$33文本 :号 后为数字
- 16进制 ;:H1122$H3F文本 :号 后大写H
- syxq变量 ;::1122$33文本 :后 为:号
- 变量取值 ;:XXYY$MM文本 :后 为非数字,及以上字符为变量
-
-
- 如:
- set sybc=1TEST;:1505$H3E[test1];:1530$H3E[test2];:1455$H3E[-----];[test3];[-----];@15050007L01;@15300007L02;@14550207L03;@14550207R08;
- set key=5
- syxq sybc key
- ::
- ::
- ::
- :: 功能2, 在指定行列开始显示指定的颜色C的字符串,不影响光标位置
- :: 单个变量可以指定多项,项与项间用{}分开
- :: 例如(在5行7列开始显示蓝底白字31(16进制为:1f)的字符串“BAT高速彩显”)
- :: set str=25$7$31$BAT高速彩显
- :: syxq.com str
- :: 功能2连用:set str=25$7$31$BAT高速彩显{}8$4$86$Code By Netbenton
-
-
- ************* 以下是 syxq.com 功能2增强 详细使用说明 ***************************
-
- 内部,寄存器,dh:行,dl:列,bh:画板色,bl:当前颜色(前景在低4位,背景在高4位)
-
- 在格式串 “25$7$31$BAT高速彩显” 中,2为功能号,5为行,7为列,31为画板色,
- “BAT高速彩显”为要显示的字符串
-
-
- 一.1 显示字符串,不处理串内的所有功能字符
-
- /# 以/#后的字符作为界线,取消字符串的功能,如:/#:333:
-
- /@ 以/@后的字符作为界线,取消字符串的功能,并仅输出颜色 /@:333:
-
- /- 以/-后的字符作为界线,取消字符串的功能,并仅输出字符 /-:333:
-
-
- 一.2
-
- 一.2.1 /~0?x1.y1-x2.y2$ 保存x1.y1 到 x2.y2 的屏幕信息 (已完成)
- /~1?x1.y1-x2.y2$ 恢复x1.y1 到 x2.y2 的屏幕信息
- 一.2.2
- /~xx#0 重复xx 次 0 改变颜色
- 一.2.3
- /~xx@0 重复xx 次 0 仅输出颜色
- 一.2.4
- /~xx-0 重复xx 次 0 仅输出字符
-
- 一.2.5 大写的G
- /Gxx? 喇叭发声频率值为:xx
- /GI 初始化
- /GB 让机箱喇叭开始发声
- /GE 让机箱喇叭停止发声
-
-
- 一.3 跟其它,表示后面的作为特殊字符处理。
- // /{ /} /[ /] /; /, /?
-
-
-
-
- 二、 {HxxG...} 语法每个功能以{开始,以}结束,可以层层嵌套,如:{2${4~字符}}
-
- {HxxG...} { 跟 "H"表示16进制,G表示功能符号
- {xxG... } { 跟 数字表示10进制,G表示功能符号
- {{xx}G... } { 跟{xx} 表示取变量xx的值,作为数值
-
-
- 二.1 代表的功能符有:
- {xx$...} n下N行(dh+N) Dwon ;push dx
- {xxU...} u上N行(dh-N) Up ;push dx
- {xxL...} L左N列(dl+N) Left ;push dx
- {xx~...} R右N列(dl-N) Right ;push dx
- {xx@...} @改颜色 ;push bx
- {xx-...} -改前景色 ;push bx
- {xx+...} +改背景色 ;push bx
-
- {xx#...} 使用重复,重复执行xx次“...” 中的格式串
-
- {xx?...} 如果G位为:?号,则xx的值将代表以下子功能:
-
- {0?...} 0,插入显示,不影响后面的任何字符的位置
- {1?...} 1, 在光标位置输出显示,
- {2?...} 2, 取光标位置字符的颜色作为显示颜色 (此项CPU占用大,原因在,int 10上)
- {3?xx$yy$...} 3,表示的重新指定显示位置。
-
- 其它保留,暂作忽略处理
-
- 二.2 G如果是未知功能符号,保留,暂作忽略处理
-
-
- 二.3
- {{变量名}G... } {{变量名}?... } 数值进行变量扩展取值
-
- 二.4
- {&变量名} 进行格式串变量扩展取值。
-
- {&abc:~1,4} 取变量abc的第1个字节开始,4 个字节
-
- {&&变量名} 进行格式串变量扩展取值。但其中的值将去掉所有符号的功能
-
-
- 二.5 计算式
- "{" 后跟空格 &0 为存放结果的空间
-
- { &0 =:1 + :2 } 进入计算模式
- { &0 =:3 + 11 }
- { &0 =:G * 2 }
- { &0 =:{&var} }
-
-
-
- 二.6
- { 跟其它符号,保留,暂作忽略处理。
-
-
-
- 三.单字功能:
-
- ; 换行,dh+1,且dh*宽+dl =>di
- , 换列,不改变dl,仅仅di+1
- [ 动态显示开始,以 ] 结束,已经解决和IF [...]间的层次嵌套问题
- { 一个有效区开始
- } 恢复,
- ? 互换前背景,为什么不用{}格式呢,因为要恢复时,再来一次?就可以了。
-
-
-
-
-
- 五、引入syxq用户数值型变量,共有256个,表示方法如下:
-
- :0 10进制表示
- :H0a 16进制表示
- :{aa} 变量取值表示
-
- :0~:256 公用变量(只要在整个窗口中的程序都可以访问) 值大小:0~ffff
-
- :V0~V15 区域变量,遇到一次[],进入一个区域,里面的变量调用也有效 (未完成)
- 区域变量的值占用双字,即可以用来存放变量名地址 (未完成)
-
-
- 特殊值:
- 1, :Gx 光标行
- 2, :Gy 光标列
- :Gc 光标所在字符的属性
- ;Ga 光标所在字符的ascii码
- 3, :Sx 当前鼠标行
- 4, :Sy 当前鼠标列
- 5, :SX 鼠标按下时的行(大写X)
- 6, :SY 鼠标按下时的列(大写Y)
- 7, :SK 鼠标按键 左键1 右键2 中键3(如果鼠标驱动有)
- 8, :K 按键的ascii码
- 9, :Vx 当前显示的行 (已完成)
- :Vy 当前显示的列
-
-
-
-
- 六、引入条件执行语句: “[”号后一个为界定符,?是可以变的
- 可用的条件符号有:< = >
- /if :0 = 3 [? one ?]
- /if :0 = 3 [? one ? two ?]
-
-
- 七、引入,控制功能,如:
- /CQ 退出
- /CFxx? 置返回码
- /CGxx.yy# 改变光标位置 (0功能也可以实现这个效果)
-
-
- /CL n - m# 把n - m行送打印串 (只取同一颜色的)
- /CTxx. n -m# 把n - m行送打印串,过虑掉xx属性的字符 (未完成)
- /CZxx. n -m# 把n - m行送打印串,只要xx属性的字符 (未完成)
-
-
- /C$ /$ 送打印信息串,以/$结束,并且信息串支持以下特殊值:
- /@xxh 显示一个数,按16进制
- /@xxo 显示一个数,按10进制
- /{变量名} 取变量的值来显示 (正在做)
-
- /CK 等待输入一字符串 (未使用)
-
- /CSxx.xx# 改变显示窗口在空间的位置 (未使用,大图模式)
-
-
- 八、{} 作为格式串分隔符
- ************* 以上是 syxq.com 功能2 详细使用说明 ***************************
-
-
-
- :: 功能3, 把指定行列开始的N个字符转为指定的颜色C,不改变字符
- :: 单个变量可以指定多项,项与项间用空格分开
- :: 例如(从3行16列开始18个字符转为蓝底白字31(16进制为:1f):
- :: set colo=33$16$31$18
- :: xq.com colo
- :: 集合用法:set colo=33$16$31$18 4$14$41$9 6$40$51$2
- ::
- :: 功能3增强:改变了三行的颜色分别为,18 19 20个字符,注意 @ 符号不能用其它的代替
- :: set colo=33$16$31$18@19@20
- ::
- ::
- ::
- :: 功能4, 变量串功能,即串中原素以空格分开,再作为变量名,去搜索
- :: set str=4strname1 strname2 strname3...
- ::
- :: 功能5 作以下增强:
- ::
- :: 功能5 等待一按键,并开始,动态显示,有按键退出
- ::
- :: 50 开始动态显示,按键不退出,需要使用 /CQ 方式来退出
- ::
- :: 51filename 指定一个文件名,把要返回显示的信息串,写入到文件中。
-
-
- 51filename?开始/?结束 指定一个文件名返回缓存,写入的开始和结束位置。以/;代表回车符 (正在做)
- 如果开始符找不到,以0计,如果结束符找不到,则无限制 (未完成)
-
-
- :: 如果不指定,则回显示出来,可用于管道操作
- ::
- :: 52 开始动态显示,不响应按键
- ::
- :: 功能6,指定框内:
- :: HH
- :: 60$0-24$79$80# 所有颜色灰化,在HH位置指定运算数据
- :: 60$0-24$79$80$ 所有颜色增亮,在HH位置指定运算数据
- :: 60$0-24$79$80= 所有颜色前背景交换,HH位置无意义
- :: 60$0-24$79$80@ 所有字符清空,HH位置无意义
- ::
- :: 7功能,格式串库文件调入
- ::
- :: 格式串:=7文件名
- ::
- :: 把指定文件名的内容调用内存,像批处理变量一样使用。
- :: 但是如果自定义变量名与bat的变量名相同是,以bat的变量有效。
- ::
- :: 把一些常用的功能模板放到一个文件内。如游戏的地图,图标,窗口,动画,特效等。
- ::
- :: 这样可以减少批处理的环境变量空间的使用。
- ::
- ::
- :: 库文件中有效的变量定义以 :@ 开始,以 :# 结束
- :: 如文件内容可以这样:
-
-
- ...自定义变量列表...
- :@
- 窗口=^_^------^_^
- table={$╔{7#━}╗;{4#┃{14# }┃;}╚{7#━}╝}
- :#
-
-
- :: 功能9,为写示例文件增加的功能
- ::
- :: 9行$列$底色$颜色表$首尾符
- :: 98$2$31#23456abcde#{}显示功能字符串
- ::
- :: "$"可以用其它非数字符号代替。#是固定的,{}号根据要显示的格式串来选择合适的字符
- :: 以达到理想的效果;
- :: 数值可为10进制或16进制(在前面加H),应小于255,颜色表为单字符的16进制字符
- :: 为了效率,并没有做过多的语法出错校对。使用时应严格按语法定义。
- ::
- ::////////////////////////////////////////////////////
-
- ================= 分项功能完 =========================
-
- :: 注意:
- :: 一次性可以指定多个变量,如:
- :: xq.com cur colo str
- :: 可以一次性完成三种功能的定义,理论上可以指定N个变量,
- :: 只是受到com程序的参数只能有128个字符的限制。但是功能4可以祢补这一缺限。
复制代码
链接: https://pan.baidu.com/s/12U5p8uMGXwQYsiJx9P25LQ 提取码: n1y9
作者: zjw767676 时间: 2010-7-27 23:08
附件中的演示没看到彩色效果!
彩虹灯只有光标在显示
是不是每次运行都要初始化?
作者: ZJHJ 时间: 2010-7-28 11:01
如上,确实挂了。如上,确实挂了。
作者: netbenton 时间: 2010-7-28 11:37
不可能呀,应该可以看到这个效果的~~~
作者: neorobin 时间: 2010-7-28 16:11
看到了楼主所说的效果
作者: zjw767676 时间: 2010-7-28 22:01
- @echo off
- set str=25$7$31$BAT高速彩显
- xq.com str
- pause
复制代码
还是看不到演示效果,不知跟系统有没有关系?
本人系统:XPsp3
作者: sl543001 时间: 2010-8-17 17:03
@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 编辑 ]
作者: sl543001 时间: 2010-8-17 17:16
这网卡的...
加上(CHCP 437 &GRAFTABL 936)>NUL
作者: netbenton 时间: 2010-9-3 08:34
已经可以在win7下正常显示了~~~
dos7 下也可以正常显示,*** 但要记得设置足够的变量空间 否则会死机***
[ 本帖最后由 netbenton 于 2010-9-3 08:37 编辑 ]
作者: netbenton 时间: 2010-9-27 01:43
2010-09-26 更新,
增加动态显示功能~~~
可以在纯dos下使用~~~
请看一楼最新附件。
以下式子可以实现下面的图片效果-
- 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\]
-
- 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 编辑 ]
作者: lifenjoiner 时间: 2010-9-28 20:19
关于这类工具,我提一个小问题: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 + * (同行)
作者: netbenton 时间: 2010-9-29 11:52 标题: re 楼上
colorcmd.exe 确实可以实现,一次彩色显示一个字符串了,可是我们想要的是更强大一点的功能。
com程序,确实有这个问题,固定了屏幕为80X25。但是也有个优点,就是程序很小。
syxq.com 能在等待按键的同时,能够显示11楼图片的效果。并且整屏刷新显示和准备接受键输入,
只需调用一次命令,效率可想而知了。
[ 本帖最后由 netbenton 于 2010-9-29 11:56 编辑 ]
作者: lifenjoiner 时间: 2010-9-29 22:14
确实是各有各的 特点。
这类程序该又可以分为两类:一是(坐标)着色型,一是格式化(彩色)输出型。
好多COM程序要是能移植成Win32版本就好了~不过像驱动、驻留内存的就难了 :p
作者: netbenton 时间: 2010-10-4 19:58
上传了syxq.com 的使用语法演示程序,
利用syxq.com自身的功能编写的生动多彩的演示脚本,不但表现了syxq.com 在彩色文本显示上的强大,而且,只要运行看一次,就大体上可以知道syxq.com的使用方法了。
作者: netbenton 时间: 2010-11-5 10:39
不到2k三方,最新演示附件在一楼,本人旁边的所有机子均通过测试,若有不能通过请Q我37659560,我也想知道原因所在,以便改进。谢谢!
作者: cjiabing 时间: 2010-11-5 11:49
可怜的我,555!~
作者: cjiabing 时间: 2010-11-11 10:45 标题: 楼主解释
用以下三个代码做了测试:
-
- @echo off
- set var=25$7$31$BATdddddddddddddddddddddddddddddddd
- syxq.com var
- pause
- @echo off
- echo Q|debug
- title 稍等...
- ping 543001>nul
- set str=25$7$31$BAT高速彩显
- syxq.com str
- pause
- @echo off
- 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\]
- 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}}}}}"
- syxq.com dqq
- pause
复制代码
偶尔正常显示,但更多Press any key to continue . . .
不是很正常。
并且在执行第二个代码时,能显示“-Q”的时候一般能够正常显示,但花费时间一分钟左右。
在前面添加一个“ping 43001>nul”成功的机率会提高,但也不能保证每次都有效。
不懂是我的机子问题还是什么问题。
-
- @echo off
- ping 43001>nul
- set tar=25$7$36$trtrtttttttttttttttttttt
- syxq.com tar
- pause
复制代码
作者: cjiabing 时间: 2010-11-14 01:55 标题: 伤心!~
我重装过系统了,试了下,还是不得啊~
系统:
番茄花园Microsoft Windows XP [版本 5.1.2600]SP2
为了试试免费卡巴斯基,害的我重装了一个晚上系统!~
作者: netbenton 时间: 2011-12-22 23:04
本帖最后由 netbenton 于 2011-12-22 23:10 编辑
sybc.com + xq.com 合并的syxq.com
新增了:
鼠标功能,------------sybc 和 xq都有鼠标功能,但是使用方法不同,作用不同,可根据情况选用
音乐功能,------------机箱扬声器发声;音乐演奏同时不影响显示和操作
计算式功能,----------支持四则混合运算,逻辑运算,多重()任意组合
条件式功能,----------条件式的对比两项支持算术表达式
文本回传功能,--------返回信息可指定回传到文件中,或者像echo命令一样显示出来,支持管道操作
用户变量库文件功能,
数值变量增加了特殊值。
变量名嵌套取值功能,
。。。
好了,不说了,看一楼,已经更新,
批处理爱好者不容错过~~~~~
哦!!!还有一点~~
syxq.com
的这些功能,在 纯dos,winxp,win7都可以正常运行~~~~
要看源码的,请到QQ群上留言。
作者: cjiabing 时间: 2011-12-22 23:05
TNN的,装了个原版XP,一切正常了!
楼主真是能人,我试了一下,非常满意啊!~
效率要比以前好多了,但还是有提高的空间!~
加油啊~!
作者: netbenton 时间: 2011-12-22 23:24
回复 21# cjiabing
非常抱歉,有些系统不能正常运行以前的xq.com 的问题,不是大家的错,是原来的xq.com的Bug,现在最新版的xq.com 已经和sybc.com合并了,并且Bug 也已经修正了。
在此对为此问题困扰过的人,表示抱歉。。。
作者: cjiabing 时间: 2011-12-22 23:45
回复 22# netbenton
呵呵,不是说我吧?
作者: hacker85 时间: 2011-12-24 23:06
不错的程序,可以学习不少
作者: hacker85 时间: 2011-12-24 23:06
不错的程序,可以学习不少
作者: a415987611 时间: 2012-6-3 22:04
晕,用了新版圣诞版,还是同21楼的情况
到底该怎么用啊,执行“syxqts.bat”能看到效果,可自己写bat调用却没反应
作者: netbenton 时间: 2012-6-4 12:17
本帖最后由 netbenton 于 2012-6-9 09:50 编辑
我说明下18楼代码不能正常显示的原因:
其中的一到三项都是:由于显示得太快,cmd.exe 还没来得及有送去显示,syxq.com var 就执行完返回了。使用syxq.com 自带的等待键功能5,就可以看到显示结果了。
第二项中如果要显示中文,需要转换代码页,方法如下:
CHCP 437 &GRAFTABL 936
第三项,首先是少了功能2,的入口格式串,如:“215$7$31$”
还有,格式串中调用其它变量的方法是"{&dqq}",变量tab2格式串中有引用,{&dqq},而不是使用变量dqq去引用tab2
最后,需使用5号功能让syxq.com tab2 key,执行时不马上返回才能循环动态显示。
最后,谢谢你对 syxq.com 的关注~~~~
PS: 18楼的代码改成这样就可以正常了,如下:- @echo off
-
- ::使得在使用16位的程序时,也可以让 CMD 窗口支持中文
- CHCP 437 &GRAFTABL 936
-
-
-
- :: syxq.com 的5号功能,是一个等待按键
- set key=5
-
- ::一个标准的syxq.com 的显示格式串如下
- set var=25$7$31$BATdddddddddddddddddddddddddddddddd
-
- ::调用了两个变量,var 和 key ,key的调用起到了按任意键继续的作用
- syxq.com var key
- echo;您最后按键的返回码是:%errorlevel%
-
-
- set str=210$7$31$BAT高速彩显 ?中文显示? /?号可以交换前背景色
-
- ::解释了 str 和 key
- syxq.com str key
-
-
- ::一个动态的功能演示。
- 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\]
- set "tab2=215$7$31${$╔{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}}}}}"
-
- syxq.com tab2 key
- pause
复制代码
作者: sds 时间: 2022-12-19 11:49
64位无法运行
作者: sds 时间: 2022-12-25 11:11
64位无法运行... 求源码,我要自己去做
作者: sds 时间: 2022-12-25 11:13
回复 20# cjiabing
怎么可能???????我Win6 64位也是微软原版的,为什么显示不兼容?????兼容模式也没用
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |