标题: [其他] 一个跨窗口的choice批处理命令:mach.exe [打印本页]
作者: netbenton 时间: 2009-10-26 20:58 标题: 一个跨窗口的choice批处理命令:mach.exe
通过三方,可以在当前cmd进程,读写另一个cmd窗口的环境变量
bat与三方可以不再仅仅是通过返回码通话了,
看一个特别的choice,
"mach.exe"
该三方的作用是:
接受键盘输入,返回ascii码,结果存到:窗口标题为“BatHome”,并且初始有变量“#=00”的cmd窗口中,
一次调用,直到按Ctrl+c退出,其它按键就会不断的刷新变量“#=??”
解决了10楼和11楼提出的建议。
附:
一个演示程序 tit.bat
一个mach.exe的实例应用,俄罗斯方块.bat
既不用到临时文件,且效率搞高了。
2009.11.4 更新:
修正了cmd环境变量过大时出现无效的情况。
改为用“#=00”来接受变量,原因是,#号是在cmd环境变量中最前的符号了。
***附件已经更新,请重新下载***
http://bcn.bathome.net/s/tool/index.html?key=mach
作者: zjw767676 时间: 2009-10-26 21:40
没弄懂tit的作用!
作者: 523066680 时间: 2009-10-26 21:50
真爽,可以提高效率了。
作者: 小勇12 时间: 2009-10-26 21:57
麻烦举个例子说明一下
作者: 523066680 时间: 2009-10-26 22:44
首先,我放在了桌面上,提示docume~1 xxxx 一看就知道是路径问题
第一个出现路径的地方,第三行改成了
start "" "%~s0" net
继续测试。
打开后,是最近成为经典的批游戏模式(一批多功能+自调用)
批处理的头部是通过参数来辨别本次批处理所要执行的功能的,跳到指定功能区。
出现一个大框和一个小框,你把大框激活,在上面按键,白色的小框可以显示按键值。
也就是一个框负责显示,一个框负责读取键值了。
(因为批处理要做到同时刷屏的情况下又要不断读取键值比较麻烦(我不会,见过netbenton的数码雨可以),
所以做游戏的时候经常是用一个框输入,一个框显示画面的方式,来分担信息的处理
显然数据之间的沟通是非常重要滴~ 把信息写入文件,或者利用一些可以储存信息的命令
如assoc ,ftype 关联无关选项等记录信息,都比较耗时和耗cpu,于是……
)
[ 本帖最后由 523066680 于 2009-10-26 23:03 编辑 ]
作者: 523066680 时间: 2009-10-26 22:57
额那个……
变量名和 标题只能是0和bathome 波?
估计mach是netbenton原创拉,帮bathome标题广告一番了哈哈。
[ 本帖最后由 523066680 于 2009-10-26 23:04 编辑 ]
作者: 523066680 时间: 2009-10-26 23:07
前段时间想用ftype 或者assoc 记录信息的,这样也可以实现另一个框读取,不过
要获取信息的时候又要搞字符处理了,不干……
mach是很好的选项
作者: netbenton 时间: 2009-10-26 23:32
谢谢523066680,解释得很棒。
一楼附件增加了一个实例应用,请大家重新下载。
仍一个不足之处,就是以start /b 运行在同一个窗口时,不能正常运行。也就是只能跨窗口操作,
作者: plp626 时间: 2009-10-26 23:37
我觉得批处理能做到按键不用回车,支持上下左右键控制输入算是很大进步了[当然这个还得用三方],如果能有个彩屏的也人性化了,再来个多进程通信算是齐全了,
这些都还处在娱乐娱乐阶段,【话说回来,我觉得现在国内的批处理论坛都还是以娱乐消遣为主】,象兄这样娱乐技术的不多,论坛多一些如此会员一定可以改变风格
不过我觉得批处理进程通信用临时文件【把要传递的数据存到共享文件里】目前还是最佳选择
作者: plp626 时间: 2009-10-26 23:43
原帖由 netbenton 于 2009-10-26 20:58 发表
既不用到临时文件,且效率搞高了。...
用三方的话效率不会高于临时文件,临时文件还是只限于cmd一个进程,
而三方工具进程频繁地开启又退出 这样一定很耗时,
作者: 小勇12 时间: 2009-10-27 07:00
好占用内存哟哦,要是内存占用少就好了
作者: netbenton 时间: 2009-10-27 19:27
re 10楼
我所指的是,三方通过临时文件与BAT对话,同 三方直接存取变量与BAT对话,
你说哪个快呢?
re 11楼
所有的控制台三方,运行后都会留下内存碎片,包括系统自带的ping.exe也不例外。
平均每运行25~30次左右会“吃”掉1M的内存!!
至于原因何在?就不知道了。
你说mach.exe占内存,说不过去的。
[ 本帖最后由 netbenton 于 2009-10-27 19:30 编辑 ]
作者: netbenton 时间: 2009-10-27 21:03
mach.exe
升级
一次打开,就会向"BatHome"窗口不断的送按键,
cup零占用(注意:测试代码中cup占用%100,是主程序批处理循环所至,而并非mach.exe所为)
作者: zjw767676 时间: 2009-10-27 21:42
重新下载了,tit运行正常。俄罗斯方块却玩不了!
作者: 523066680 时间: 2009-10-28 09:03
批处理随便一个紧凑的循环,都很占内存的。好像是有堆积作用
@echo off
:a
ping -n 1 127.1>nul
goto :a
根
@echo off
:a
ping -n 2 127.1>nul
goto :a
cpu占用率差的太远了
--------------------------
对了,俄罗斯方块我这边测试也没成,在读代码中……
[ 本帖最后由 523066680 于 2009-10-28 09:25 编辑 ]
作者: netbenton 时间: 2009-10-28 12:42
不应该呀!?
我自己下测试来可以的。
对了,要连 "bat" 文件也要更新才行的,
因为用法不同了
还有小键灯要亮才可以"玩俄罗斯方块"的
[ 本帖最后由 netbenton 于 2009-10-29 07:49 编辑 ]
作者: 523066680 时间: 2009-10-28 16:40
头痛…… 读到晕了。
打算要测试,在循环中显示按键值,也不知道放哪里好,看跳转看晕了。
作者: 523066680 时间: 2009-10-28 17:25
俄罗斯方块实在改不下去了哈,还是先小小的体验一下mach功能先
回忆起一个游戏模式了,一个小人停在一个板上,然后画面不断
地向上,小人必须在不掉如深渊的情况下跳到下一个板块上,
有些板块是带刺的不能跳。
o(∩_∩)o不做,很花时间的
小小体验,把输入信息字符化~- @echo off
- if "%~1" equ "net" goto :prar1
- start "key" "%~f0" net
- set 0=00
- title BatHome
- rem 测试得知,title应该在赋值0=00后执行
- ::-action-配置一下先
- setlocal enabledelayedexpansion
- set "space="
- for /l %%a in (1,1,79) do (set space=!space! )
- set dotspace=40
- set /a do61=-1,do64=1
- ::下面是显示的循环了
- :lp
- echo,!space:~0,%dotspace%!*
- for /l %%a in (1,1,3) do (ping 1 127.1>nul)
- if "!0!" equ "03" (taskkill /fi "WINDOWTITLE eq key*" /im cmd.EXE &exit)
- set /a dotspace+=do!0!
- set 0=00
- goto :lp
-
- ::输入框,读取键值并把值赋予环境变量0
- :prar1
- mode con: cols=20 lines=2
- echo;请把我置顶
- mach
复制代码
作者: Batcher 时间: 2009-10-28 19:38 标题: 回复 18楼 的帖子
“是男人就下100层”游戏?
作者: 523066680 时间: 2009-10-28 19:48 标题: 回复 19楼 的帖子
这名字起的真好……
作者: netbenton 时间: 2009-10-30 21:46
呀!真奇怪!
俄罗斯方块.bat
放在1个和4个字符为名的文件夹内时,变量环境的线性地址就不在10000H了,
其它则对;
而
tit.bat
却不会出现这种情况,
为什么呢?
作者: yslyxqysl 时间: 2009-10-30 22:11
我说过有风险吧...
作者: netbenton 时间: 2009-10-31 22:19
风险倒是没有什么风险,只是有的情况失效
如果你使用的变量环境不是很大,请放心使用mach.exe
如果过大也不会有风险,只是会失效。
已经知道是怎么回事了,是因为变量空间过大后,cmd.exe增加申请了内存,并且改变了存放的地址,特别是开启了变量延迟后,变化更大,每执行一次setlocal ... 和endlocal
都会改变当前活动变量环境的地址,看来需要确定的是存放当前活动的环境变量指针的位置。
经过一翻查找,未果。
现在可以知道的是:当环境变量空间超过一定容量后,起始地址就从:008e0000H开始,连续存放,开启变量延迟后,最新活动变量在最后,各个环境变量所占内存最小单位为10000H,可以从008e0000H开始一直接搜索到最活动环境变量为止,来找到当前活动变量段的地址,只是效率问题。
最好的方法还是能找到存放指针的位置。
作者: yslyxqysl 时间: 2009-10-31 23:08
终于体会到C程序&&**的有多么好了
作者: netbenton 时间: 2009-11-4 19:08
已经成功找到存放活动环境变量指针的线性地址了,
并且已经更新mach.exe
欢迎大家继续测试。
re 523066680
你的“贪吃蛇”要是用mach取键盘输入,速度可以翻倍哦
作者: zhouyongjun 时间: 2010-4-19 14:47
标题和变量可以指定就好
作者: 523066680 时间: 2010-4-22 22:12 标题: 回复 25楼 的帖子
本顿是个很认真很热血的人,
贪吃蛇嘛,是别人的作品,我是去模仿+尝试。
终究是换了一个环境去描绘其他东西了~
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |