批处理之家's Archiver

sl543001 发表于 2010-3-20 15:26

内嵌式 无3方 彩色cmd界面 支持鼠标键盘

俺[color=red]SYBN[/color],近期研究[color=blue]斗地主[/color]脚本.[color=magenta]最新版基于SYBC1.1.41,已经支持鼠标,代码在24楼.
[/color]因为需要[color=magenta]好看滴[/color]界面,自己用汇编编写了[color=red]彩色字符输出工具[/color][color=blue]SYBC.COM[/color]
[color=#0000ff][/color]
[size=4][color=#0000ff]注意:发布了更好更详细的SYBC教程,大约3万字,还包括大量截图.[/color][/size]
[size=4][color=#0000ff]详细介绍了利用SYBC开发五子棋的过程,大家可以下载过去看看.[/color][/size]

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

好吧,大家首先是要[color=blue]截图[/color]和[color=red]下载地址[/color][color=black],截图就在下边,是cmd脚本的实图哦![/color]
[color=black]至于[color=red]下载地址[/color],既然内嵌了,又[color=blue]何须下载[/color]?吧下面代码保存为cmd运行即可生成SYBC.com(此代码版本1.1.31 更新日期2010-4-3)[/color]
[color=black][code]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`
SET V=`A80`DB 00``RCX`114`n SYBC.COM`w`Q
(ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:`=&ECHO.%)|DEBUG>nul[/code][/color]
-------------------------------------------------------------------------------
好吧,现在大家手上应该有SYBC.com文件了吧,没有就生成一个.
接下来的问题是[color=red]SYBC应该怎么用[/color],SYBC分为[color=blue]基础[/color]与[color=blue]高级[/color]2中语法,(2者仅在速度上有差别,最终效果一至)
可以[color=blue]以SYBC.com文件形式运行[/color],也可以[color=blue]直接运行于内存[/color].(后者略快)
-------------------------------------------------------------------------------
使用SYBC之前需要初始化(特别是win2000/XP),
初始化的方法很简单,首先如果你要使用中文,需要在你的代码开头加上[color=blue]"(CHCP 437 &GRAFTABL 936)>NUL"[/color]
然后你需要[color=blue]运行一次无参数的SYBC[/color],用户按任意键后初始化完成.:[语法图第1例]
(由于没有提示,所以建议大家最好用echo告知用户要按任意键)
-------------------------------------------------------------------------------
[color=blue]基础语法[/color]:[语法图第2例]
SYBC [color=red]位置[/color][color=blue]颜色[/color][color=magenta]内容[/color]
SYBC [color=red]10303[/color][color=blue]$F1[/color][color=magenta]SYBN#s[/color]
[color=black]位置 5位数字第23位为行数第45位为列数[/color]
[color=black]颜色 用$引导的2个16进制数,同color命令[/color]
内容 任意字符串 (注意不要使用$#;三个符号以免冲突)
#号 无内容,保留此位置原内容仅改变颜色
$号 允许存在多个$号,分别控制之后的字符颜色
-------------------------------------------------------------------------------
利用[color=blue]基础语法[/color]可以实现SYBC的全部效果,
如果觉得速度不满意,可以使用高级语法,
把多行[color=blue]基础语法[/color]合并成一行[color=red]高级语法[/color][color=black]从而减少调用次数以加速[/color].
不论使用什么语法,没次调用SYBC的时间都约0.01秒,瓶颈在硬盘的响应速度.
另外使用内嵌式调用,跳过磁盘直接运行SYBC可以进一步提高速度,但会牺牲代码可读性.
-------------------------------------------------------------------------------
[color=#ff0000]高级语法[color=#000000]: [/color][/color]
[color=#ff0000][color=#000000][语法图第3例][/color]
[/color][color=black]SYBC 10303$F1SYBN;2010[/color]
效果同
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则无法执行了!
当然,如果你使用后面的内嵌式调用,则没有这个限制了!
--------------------------------------------------------------------------------
[color=red]内嵌式调用[/color]:
使用DEBUG可以方便的调用com程序,之前生成SYBC.com用的就是DEBUG,
我们是要稍微修改就可以用于内嵌式调用了!
首先,把SYBC.com的代码以16进制的形式保存在变量SYBCOM中[code]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`[/code]然后把DEBUG指令保存在变量V中[code]SET V=;A80;DB 10 00 "10303$F1SYBN2010" 0D;;RCX;114;G;Q[/code]注意10是指参数长度的16进制值,在1.1.21版中它已经没用了,不用管它照着写或写别的16进制值都行.
"10303$F1SYBN2010"就是参数了,记得两边加上冒号,这里的参数长度限制大约为65个字节
最后在调用它们[code](ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL[/code]---------------------------------------------------------------------------------------------------------
当然你还是没有突破124参数限制,反而限制降低到了约65字节,
如何突破限制呢?修改变量V的值就可以了.[code]SET V=;A80;DB 10 01;; A280;DB 10 00 "10303$F1SYBN";DB "2010-";DB "3-16" 0D;;RCX;F0;G;Q[/code]大家不需要管为啥要这样写,只需要知道你可以吧参数分段,每段少于65字节,写在引号里就好了,
你可以写无限多个DB "XXXXXXXX"注意最后一个要加上0D不要忘记0D前的空格就好.

如有问题联系QQ:354324773

[url=https://imgse.com/i/pkV6KHg][img]https://s21.ax1x.com/2024/05/08/pkV6KHg.png[/img][/url]

[url=https://imgse.com/i/pkV6uDS][img]https://s21.ax1x.com/2024/05/08/pkV6uDS.png[/img][/url]

sl543001 发表于 2010-3-20 15:30

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

[[i] 本帖最后由 sl543001 于 2010-4-3 03:24 编辑 [/i]]

sl543001 发表于 2010-3-20 15:36

目前的计划是,搞到同类工具的C语言源代码,然后用32位汇编重写代码,争取搞成几KB或更小的代码,再像SYBC一样嵌进脚本去

ZJHJ 发表于 2010-3-20 22:44

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

[[i] 本帖最后由 ZJHJ 于 2010-3-20 23:05 编辑 [/i]]

BatCoder 发表于 2010-3-20 22:48

[quote]你可以写[color=Red]无限多个[/color]DB "XXXXXXXX"[/quote]
这个说法不太严谨吧,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已开始支持读取环境变量
生成代码:[code]
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`
SET V=`A80`DB 00``RCX`114`n SYBC.COM`w`Q
(ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:`=&ECHO.%)|DEBUG>nul[/code]DEBUG调用代码:[code]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`
SET SYBCV=`A80`DB FF``RCX`114`G`Q
::事先把参数SET到变量SYBCS,运行下一行即可,记得初始化
(ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%SYBCV:`=&ECHO.%)|DEBUG>NUL[/code]

[[i] 本帖最后由 sl543001 于 2010-4-3 02:49 编辑 [/i]]

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、
[Quote]#号 无内容,保留此位置原内容仅改变颜色[/Quote]
这句话怎么理解?我试了下,跟空格是一个效果。

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

3、[Quote][code]SET V=;A80;DB 10 01;; A280;DB 10 00 "10303$F1SYBN";DB "2010-";DB "3-16" 0D;;RCX;F0;G;Q[/code][/Quote]
这段代码怎么运行不了?

[[i] 本帖最后由 ___ 于 2010-4-22 00:25 编辑 [/i]]

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   (不区分大小写)

[[i] 本帖最后由 sl543001 于 2010-4-26 22:35 编辑 [/i]]

sl543001 发表于 2010-4-26 22:36

修正了楼上代码中SYBC.COM生成代码被注释问题,

hfg1977 发表于 2010-10-15 17:10

[code]@echo off&(CHCP 437&graftabl 936)>nul
::================ SYBC 版本1.1.31 ===========================
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`
ECHO 请按任意键完成初始化...
SET V=`A80`DB 00``RCX`114`G`Q
(ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:`=&ECHO.%)|DEBUG>nul
ECHO 初始化结束
::方式①
SET V=;A80;DB 10 00 "10303$F1SYBN2010" 0D;;RCX;114;G;Q
::注意10是指参数长度的16进制值,在1.1.21版中它已经没用了,不用管它照着写或写别的16进制值都行.
::"10303$F1SYBN2010"就是参数了,记得两边加上冒号,这里的参数长度限制大约为65个字节
(ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL

::方式②
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前的空格就好.
(ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL
::============================================================
pause[/code]首先感谢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

这个东西太强大了。。佩服楼主。

页: [1] 2

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.