Board logo

标题: [其他] 内嵌式 无3方 彩色cmd界面 支持鼠标键盘 [打印本页]

作者: sl543001    时间: 2010-3-20 15:26     标题: 内嵌式 无3方 彩色cmd界面 支持鼠标键盘

SYBN,近期研究斗地主脚本.最新版基于SYBC1.1.41,已经支持鼠标,代码在24楼.
因为需要好看滴界面,自己用汇编编写了彩色字符输出工具SYBC.COM

注意:发布了更好更详细的SYBC教程,大约3万字,还包括大量截图.
详细介绍了利用SYBC开发五子棋的过程,大家可以下载过去看看.

为啥是"无3方"呢?SYBC.COM不是3方工具吗?
因为SYBC被设计为内嵌于脚本中,你可以不在磁盘中生成SYBC.COM文件.
而是直接把他从脚本中释放到内存,并在内存中运行.
当然如果你愿意,它也可以像一般三方工具那样被使用.

好吧,大家首先是要截图下载地址,截图就在下边,是cmd脚本的实图哦!
至于下载地址,既然内嵌了,又何须下载?吧下面代码保存为cmd运行即可生成SYBC.com(此代码版本1.1.31 更新日期2010-4-3)
  1. SET SYBCOM=A100`80BE AC00 3C 375 83E9 3C00 ACFF 4275`2CBE AC00 E08A 86AC 50C4 BE1F 0 3CAC`7553 ACFB 593C F675 3CAC 7542 ACF1 433C`EC75 3CAC 7553 ACE7 3D3C E275 14EB 3CAC`743A 3C0F 740D 3C4D 7400 8349 1EE 48EB`54B4 E8AC 93 ADE8 3C00 7F18 8A37 E8F0`87 A1E8 3C00 7F4F 8A2B B0D0 F602 50E2`A0B0 E6F6 35F 57F8 3CAC 7424 E80A 6A`49E8 8A00 EBCA E817 3F CA8A 10EB B0`16CD C48A 4CB4 21CD 815F A0C7 5700 B850`B800 750 2B5A 8AEE ACD1 243C D974 3B3C`8C74 D3C DE74 3C DA74 233C 575 D783`EB01 AA01 C28A EBAA E8E0 1D 3C93 7E39`402 8009 39FB 37E C380 2409 800F FE3`10B2 E2F6 C302 D08A ACC3 203C FB74 D3C`A274 3C 9E74 D88A 3CAC 7420 3CEC 740D`3C93 7400 C38F 2C93 8030 30EB AB4 E4F6`C302 C3`
  2. SET V=`A80`DB 00``RCX`114`n SYBC.COM`w`Q
  3. (ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:`=&ECHO.%)|DEBUG>nul
复制代码

-------------------------------------------------------------------------------
好吧,现在大家手上应该有SYBC.com文件了吧,没有就生成一个.
接下来的问题是SYBC应该怎么用,SYBC分为基础高级2中语法,(2者仅在速度上有差别,最终效果一至)
可以以SYBC.com文件形式运行,也可以直接运行于内存.(后者略快)
-------------------------------------------------------------------------------
使用SYBC之前需要初始化(特别是win2000/XP),
初始化的方法很简单,首先如果你要使用中文,需要在你的代码开头加上"(CHCP 437 &GRAFTABL 936)>NUL"
然后你需要运行一次无参数的SYBC,用户按任意键后初始化完成.:[语法图第1例]
(由于没有提示,所以建议大家最好用echo告知用户要按任意键)
-------------------------------------------------------------------------------
基础语法:[语法图第2例]
SYBC 位置颜色内容
SYBC 10303$F1SYBN#s
位置 5位数字第23位为行数第45位为列数
颜色 用$引导的2个16进制数,同color命令
内容 任意字符串 (注意不要使用$#;三个符号以免冲突)
#号 无内容,保留此位置原内容仅改变颜色
$号 允许存在多个$号,分别控制之后的字符颜色
-------------------------------------------------------------------------------
利用基础语法可以实现SYBC的全部效果,
如果觉得速度不满意,可以使用高级语法,
把多行基础语法合并成一行高级语法从而减少调用次数以加速.
不论使用什么语法,没次调用SYBC的时间都约0.01秒,瓶颈在硬盘的响应速度.
另外使用内嵌式调用,跳过磁盘直接运行SYBC可以进一步提高速度,但会牺牲代码可读性.
-------------------------------------------------------------------------------
高级语法:
[语法图第3例]
SYBC 10303$F1SYBN;2010
效果同
SYBC 10303$F1SYBN
SYBC 10403$F12010
分号 是换行符可以再上一行的起点列从启一行继续
如果不使用换行符而写一个很长的字符串,则会像echo那样自然换行.

[语法图第4例]
SYBC 10303$F1SYBN;:10401$F12010
效果同
SYBC 10303$F1SYBN
SYBC 10401$F12010
分号冒号 效果类似于脚本中的&符,可以吧两个SYBC命令连接在一起使用.
这样你几乎就可以吧所有连续出现的sybc命令合并成一行,速度会快很多.
--------------------------------------------------------------------------------
不过大家要注意com程序的参数是有长度限制的.
理论长度为127,实际可用长度为124,超过124则无法执行了!
当然,如果你使用后面的内嵌式调用,则没有这个限制了!
--------------------------------------------------------------------------------
内嵌式调用:
使用DEBUG可以方便的调用com程序,之前生成SYBC.com用的就是DEBUG,
我们是要稍微修改就可以用于内嵌式调用了!
首先,把SYBC.com的代码以16进制的形式保存在变量SYBCOM中
  1. SET SYBCOM=A100`80BE AC00 3C 375 83E9 3C00 ACFF 4275`2CBE AC00 E08A 86AC 50C4 BE1F 0 3CAC`7553 ACFB 593C F675 3CAC 7542 ACF1 433C`EC75 3CAC 7553 ACE7 3D3C E275 14EB 3CAC`743A 3C0F 740D 3C4D 7400 8349 1EE 48EB`54B4 E8AC 93 ADE8 3C00 7F18 8A37 E8F0`87 A1E8 3C00 7F4F 8A2B B0D0 F602 50E2`A0B0 E6F6 35F 57F8 3CAC 7424 E80A 6A`49E8 8A00 EBCA E817 3F CA8A 10EB B0`16CD C48A 4CB4 21CD 815F A0C7 5700 B850`B800 750 2B5A 8AEE ACD1 243C D974 3B3C`8C74 D3C DE74 3C DA74 233C 575 D783`EB01 AA01 C28A EBAA E8E0 1D 3C93 7E39`402 8009 39FB 37E C380 2409 800F FE3`10B2 E2F6 C302 D08A ACC3 203C FB74 D3C`A274 3C 9E74 D88A 3CAC 7420 3CEC 740D`3C93 7400 C38F 2C93 8030 30EB AB4 E4F6`C302 C3`
复制代码
然后把DEBUG指令保存在变量V中
  1. SET V=;A80;DB 10 00 "10303$F1SYBN2010" 0D;;RCX;114;G;Q
复制代码
注意10是指参数长度的16进制值,在1.1.21版中它已经没用了,不用管它照着写或写别的16进制值都行.
"10303$F1SYBN2010"就是参数了,记得两边加上冒号,这里的参数长度限制大约为65个字节
最后在调用它们
  1. (ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL
复制代码
---------------------------------------------------------------------------------------------------------
当然你还是没有突破124参数限制,反而限制降低到了约65字节,
如何突破限制呢?修改变量V的值就可以了.
  1. SET V=;A80;DB 10 01;; A280;DB 10 00 "10303$F1SYBN";DB "2010-";DB "3-16" 0D;;RCX;F0;G;Q
复制代码
大家不需要管为啥要这样写,只需要知道你可以吧参数分段,每段少于65字节,写在引号里就好了,
你可以写无限多个DB "XXXXXXXX"注意最后一个要加上0D不要忘记0D前的空格就好.

如有问题联系QQ:354324773




作者: sl543001    时间: 2010-3-20 15:30

使用SYBC的好处在于,
你无须在发布脚本的时候附带这个3方工具,
你只需要在脚本中加上不到1K的生成或调用代码就好了.
就凭这一点,可以干趴下一批同类3方工具
不过不支持win2003及其以后的系统是他的致命弱点

[ 本帖最后由 sl543001 于 2010-4-3 03:24 编辑 ]
作者: sl543001    时间: 2010-3-20 15:36

目前的计划是,搞到同类工具的C语言源代码,然后用32位汇编重写代码,争取搞成几KB或更小的代码,再像SYBC一样嵌进脚本去
作者: ZJHJ    时间: 2010-3-20 22:44

支持这个计划,鼠标获取一定要有。C工具合集那个,设置代码比较复杂,我不喜欢用,太占CPU了。
ConsExt 支持鼠标获取,CPU占用也少。还有实时时间显示,我已经试过发现SYBC与ConsExt 同时可以兼容。如果将主要功能纳入SYBC嵌进脚本去一定很完美。

[ 本帖最后由 ZJHJ 于 2010-3-20 23:05 编辑 ]
作者: BatCoder    时间: 2010-3-20 22:48

你可以写无限多个DB "XXXXXXXX"

这个说法不太严谨吧,set定义变量也是有限制的吧?
作者: sl543001    时间: 2010-3-21 00:26

在(ECHO.%SYBCOM:;=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL中
既然已经有了SYBCOM和V两个变量,再加个W啥的也没问题啊,最多可以占满64K内存
作者: sl543001    时间: 2010-3-21 00:28

赶紧找到要用的API,然后找32位汇编高手去汇编一下
作者: sl543001    时间: 2010-3-21 00:29

这是俺今天下午的成果
作者: ZJHJ    时间: 2010-3-21 10:28

将会对CMD界面设计具有新时代的功劳
作者: zjw767676    时间: 2010-3-21 14:51

嗯,彩色界面!
也能像一般应用程序一样多姿多彩了!!!!!
作者: plp626    时间: 2010-3-21 23:54

严重期待楼主32位的作品问世。
作者: zjw767676    时间: 2010-3-22 19:00

[attach]2915[/attach]
作者: sl543001    时间: 2010-4-3 02:31

遇到问题请尝试使用最新版SYBC,
楼上可能是DEBUG调用部分出错,没生成正确的SYBC,因为SYBC代码中没有出现过FF
目前最新版1.1.31(不定期更新中...)
1.1.31已开始支持读取环境变量
生成代码:
  1. SET SYBCOM=A100`80BE AC00 3C 375 83E9 3C00 ACFF 4275`2CBE AC00 E08A 86AC 50C4 BE1F 0 3CAC`7553 ACFB 593C F675 3CAC 7542 ACF1 433C`EC75 3CAC 7553 ACE7 3D3C E275 14EB 3CAC`743A 3C0F 740D 3C4D 7400 8349 1EE 48EB`54B4 E8AC 93 ADE8 3C00 7F18 8A37 E8F0`87 A1E8 3C00 7F4F 8A2B B0D0 F602 50E2`A0B0 E6F6 35F 57F8 3CAC 7424 E80A 6A`49E8 8A00 EBCA E817 3F CA8A 10EB B0`16CD C48A 4CB4 21CD 815F A0C7 5700 B850`B800 750 2B5A 8AEE ACD1 243C D974 3B3C`8C74 D3C DE74 3C DA74 233C 575 D783`EB01 AA01 C28A EBAA E8E0 1D 3C93 7E39`402 8009 39FB 37E C380 2409 800F FE3`10B2 E2F6 C302 D08A ACC3 203C FB74 D3C`A274 3C 9E74 D88A 3CAC 7420 3CEC 740D`3C93 7400 C38F 2C93 8030 30EB AB4 E4F6`C302 C3`
  2. SET V=`A80`DB 00``RCX`114`n SYBC.COM`w`Q
  3. (ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:`=&ECHO.%)|DEBUG>nul
复制代码
DEBUG调用代码:
  1. SET SYBCOM=A100`80BE AC00 3C 375 83E9 3C00 ACFF 4275`2CBE AC00 E08A 86AC 50C4 BE1F 0 3CAC`7553 ACFB 593C F675 3CAC 7542 ACF1 433C`EC75 3CAC 7553 ACE7 3D3C E275 14EB 3CAC`743A 3C0F 740D 3C4D 7400 8349 1EE 48EB`54B4 E8AC 93 ADE8 3C00 7F18 8A37 E8F0`87 A1E8 3C00 7F4F 8A2B B0D0 F602 50E2`A0B0 E6F6 35F 57F8 3CAC 7424 E80A 6A`49E8 8A00 EBCA E817 3F CA8A 10EB B0`16CD C48A 4CB4 21CD 815F A0C7 5700 B850`B800 750 2B5A 8AEE ACD1 243C D974 3B3C`8C74 D3C DE74 3C DA74 233C 575 D783`EB01 AA01 C28A EBAA E8E0 1D 3C93 7E39`402 8009 39FB 37E C380 2409 800F FE3`10B2 E2F6 C302 D08A ACC3 203C FB74 D3C`A274 3C 9E74 D88A 3CAC 7420 3CEC 740D`3C93 7400 C38F 2C93 8030 30EB AB4 E4F6`C302 C3`
  2. SET SYBCV=`A80`DB FF``RCX`114`G`Q
  3. ::事先把参数SET到变量SYBCS,运行下一行即可,记得初始化
  4. (ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%SYBCV:`=&ECHO.%)|DEBUG>NUL
复制代码

[ 本帖最后由 sl543001 于 2010-4-3 02:49 编辑 ]
作者: sl543001    时间: 2010-4-3 02:48

斗地主脚本的SYBC已经升级至1.1.31,并完全绿色无3方化,从此无需生成SYBC.COM文件
同步升级的还有贪吃蛇脚本,经2个脚本测试暂未发现BUG
从1.1.31起可以方便的使用无限长参数和无2方调用
从而使游戏显示速度接近翻倍
正计划添加鼠标和延时支持
=========================================================
最后SYBC不支持win 2003以后系统,好在现在XP的市场占有率还有65%
为了将来打算,正筹备开发32位版,不过俺没有一点32位汇编基础
打算先研究一下APICALL,
如有高手支援火速联系QQ:354324773 群:3401238
作者: freesoft00    时间: 2010-4-3 14:10

批处理玩成这样也太强悍了
作者: bxbian951122    时间: 2010-4-4 17:16

我出现了。。。严重支持楼主的想法。。其实以前也考虑过把apicall变成代码嵌入p里
但是程序实在是太大了。。
作者: sl543001    时间: 2010-4-5 21:26

努力吧,回头俺找学校的C语言,病毒课,黑客攻防3个老师研究一下
咱计算机信息安全专业大专在读,不缺老师,资源充足..嘻嘻!
有老师不问,过期作废,呼呼...
作者: pumahxh    时间: 2010-4-6 19:06

牛人!~佩服!p既需要应用者,更需要开发者!加油,支持楼主!
作者: cww666666    时间: 2010-4-14 15:50     标题: 内嵌式调用出现错误

按照楼主描述的方法做成内嵌式调用,运行后出现提示:
SYBC不是内部命令也不是外部命令,也不是可运行的程序和批处理文件.
说明调用sybc.com代码不成功.楼主的描述有几处不明白
1..第一楼的这行SET V=`A80`DB 00``RCX`114`n SYBC.COM`w`Q
中用的是符号`后引号,而在
"然后把DEBUG指令保存在变量V中"下边的方框中的代码SET V=;A80;DB 10 00 "10303$F1SYBN2010" 0D;;RCX;114;G;Q
中用的是分号
2; 楼主的代码中用的是分号,如下:
"然后把DEBUG指令保存在变量V中"下边的方框中的代码SET V=;A80;DB 10 00 "10303$F1SYBN2010" 0D;;RCX;114;G;Q
而在说明中却说记得在参数两边加上冒号.到底是用冒号还是双引号
   无论我把以上的代码改成冒号.后引号 等几种组合情况都不能成功,麻烦楼主给予解答.
作者: cww666666    时间: 2010-4-14 15:56     标题: 生成SYBC.com后调用没问题

如题,现在只能用生成代码然后再调用的方法了.可是想突破参数的限制那样实用性更大些.对于我等不懂汇编语言的菜菜们还是把说明写的详细点.代码差一点就不能运行.
作者: ___    时间: 2010-4-22 00:22     标题: 有些疑问:

1、
#号 无内容,保留此位置原内容仅改变颜色

这句话怎么理解?我试了下,跟空格是一个效果。

2、内嵌式调用也是要先执行一次 SYBC.com?

3、
  1. SET V=;A80;DB 10 01;; A280;DB 10 00 "10303$F1SYBN";DB "2010-";DB "3-16" 0D;;RCX;F0;G;Q
复制代码

这段代码怎么运行不了?

[ 本帖最后由 ___ 于 2010-4-22 00:25 编辑 ]
作者: sl543001    时间: 2010-4-25 18:31

回21楼,
#号和空格完全不同的.
大家可以先ECHO SYBN
然后用sybc 10000$F1##
你会发现SY两个字母变色了
#号表示不替换原内容只上色
只是屏幕上原来没有内容#看起来像空格
----------------------------------------------------
内嵌式调用
需要事先执行一次无参数的内嵌式调用如call :SYBC
----------------------------------------------------
SET V=;A80;DB 10 01;; A280;DB 10 00 "10303$F1SYBN";DB "2010-";DB "3-16" 0D;;RCX;F0;G;Q
这段代码要和匹配的SYBCOM一起使用,RCX;F0太小了,试试RCX;200

==================================
新版的教程中已经模块化了所有代码,并提供多种选择模板,建议大家看看新版的教程
还有SYBC 1.1.41开始支持鼠标了,测试中...
作者: sl543001    时间: 2010-4-25 18:36

回复19楼:
旧版的代码使用分号,因为和SYBC的换行符冲突,所以统一改用`号
遇到此类不一致请替换SYBCOM,SYBV,和V 3个变量以及脚本所有中含有DEBUG行中的全部分号为`号

----------------------------------
建议使用楼上教程提供的模块化框架方案
鼠标支持测试中,框架方案暂不支持鼠标
作者: sl543001    时间: 2010-4-25 18:39

发布已经支持鼠标的斗地主脚本,大家测试一下
鼠标支持使用参数M
例call :SYBC M   (不区分大小写)

[ 本帖最后由 sl543001 于 2010-4-26 22:35 编辑 ]
作者: sl543001    时间: 2010-4-26 22:36

修正了楼上代码中SYBC.COM生成代码被注释问题,
作者: hfg1977    时间: 2010-10-15 17:10

  1. @echo off&(CHCP 437&graftabl 936)>nul
  2. ::================ SYBC 版本1.1.31 ===========================
  3. SET SYBCOM=A100`80BE AC00 3C 375 83E9 3C00 ACFF 4275`2CBE AC00 E08A 86AC 50C4 BE1F 0 3CAC`7553 ACFB 593C F675 3CAC 7542 ACF1 433C`EC75 3CAC 7553 ACE7 3D3C E275 14EB 3CAC`743A 3C0F 740D 3C4D 7400 8349 1EE 48EB`54B4 E8AC 93 ADE8 3C00 7F18 8A37 E8F0`87 A1E8 3C00 7F4F 8A2B B0D0 F602 50E2`A0B0 E6F6 35F 57F8 3CAC 7424 E80A 6A`49E8 8A00 EBCA E817 3F CA8A 10EB B0`16CD C48A 4CB4 21CD 815F A0C7 5700 B850`B800 750 2B5A 8AEE ACD1 243C D974 3B3C`8C74 D3C DE74 3C DA74 233C 575 D783`EB01 AA01 C28A EBAA E8E0 1D 3C93 7E39`402 8009 39FB 37E C380 2409 800F FE3`10B2 E2F6 C302 D08A ACC3 203C FB74 D3C`A274 3C 9E74 D88A 3CAC 7420 3CEC 740D`3C93 7400 C38F 2C93 8030 30EB AB4 E4F6`C302 C3`
  4. ECHO 请按任意键完成初始化...
  5. SET V=`A80`DB 00``RCX`114`G`Q
  6. (ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:`=&ECHO.%)|DEBUG>nul
  7. ECHO 初始化结束
  8. ::方式①
  9. SET V=;A80;DB 10 00 "10303$F1SYBN2010" 0D;;RCX;114;G;Q
  10. ::注意10是指参数长度的16进制值,在1.1.21版中它已经没用了,不用管它照着写或写别的16进制值都行.
  11. ::"10303$F1SYBN2010"就是参数了,记得两边加上冒号,这里的参数长度限制大约为65个字节
  12. (ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL
  13. ::方式②
  14. SET V=;A80;DB 10 01;; A280;DB 10 00 "10303$F1SYBN";DB "2010-";DB "3-16" 0D;;RCX;F0;G;Q
  15. ::大家不需要管为啥要这样写,只需要知道你可以吧参数分段,每段少于65字节,写在引号里就好了,
  16. ::你可以写无限多个DB "XXXXXXXX"注意最后一个要加上0D不要忘记0D前的空格就好.
  17. (ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL
  18. ::============================================================
  19. pause
复制代码
首先感谢LZ的辛苦!
存在2点疑问:
SET V=`A80`DB 00``RCX`114`G`Q 初始化成功
SET V=`A80`DB FF``RCX`114`G`Q 初始化失败
方式①的调用成功
方式②失败
作者: cjiabing    时间: 2010-10-15 21:19

学习下,可惜还要先按一次任意键!~
作者: wuhengsi    时间: 2010-10-23 00:32

感谢仁兄的分享了...

我想问问楼主...
能不能一段批评处理代码,这个代码可以判断鼠标是处于动还是处于静的状态
可以吗?烦请把代码发到我的油箱里[email]LYRWANYSYS@126.COM[/email]

真诚感谢您了!!!!!!
作者: smlz1213    时间: 2011-2-12 23:19

很强
  皮处理 彩色了
作者: hbwazxf    时间: 2011-3-18 20:39

这个东西太强大了。。佩服楼主。
作者: garyng    时间: 2011-8-14 19:51

哇~
如果再美化~
不知情的人会以为是GUI的呢~
作者: nhyehx    时间: 2014-7-29 10:40

真的太强悍了,佩服




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2