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

[其他] 一个跨窗口的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

谢谢523066680,解释得很棒。

一楼附件增加了一个实例应用,请大家重新下载。

仍一个不足之处,就是以start /b 运行在同一个窗口时,不能正常运行。也就是只能跨窗口操作,

TOP

re 10楼
我所指的是,三方通过临时文件与BAT对话,同 三方直接存取变量与BAT对话,
你说哪个快呢?



re 11楼

所有的控制台三方,运行后都会留下内存碎片,包括系统自带的ping.exe也不例外。
平均每运行25~30次左右会“吃”掉1M的内存!!
至于原因何在?就不知道了。

你说mach.exe占内存,说不过去的。

[ 本帖最后由 netbenton 于 2009-10-27 19:30 编辑 ]

TOP

mach.exe
升级

一次打开,就会向"BatHome"窗口不断的送按键,
cup零占用(注意:测试代码中cup占用%100,是主程序批处理循环所至,而并非mach.exe所为)

TOP

不应该呀!?
我自己下测试来可以的。

对了,要连  "bat" 文件也要更新才行的,
因为用法不同了

还有小键灯要亮才可以"玩俄罗斯方块"的

[ 本帖最后由 netbenton 于 2009-10-29 07:49 编辑 ]

TOP

呀!真奇怪!
俄罗斯方块.bat
放在1个和4个字符为名的文件夹内时,变量环境的线性地址就不在10000H了,
其它则对;


tit.bat
却不会出现这种情况,
为什么呢?

TOP

风险倒是没有什么风险,只是有的情况失效
如果你使用的变量环境不是很大,请放心使用mach.exe
如果过大也不会有风险,只是会失效。


已经知道是怎么回事了,是因为变量空间过大后,cmd.exe增加申请了内存,并且改变了存放的地址,特别是开启了变量延迟后,变化更大,每执行一次setlocal ... 和endlocal
都会改变当前活动变量环境的地址,看来需要确定的是存放当前活动的环境变量指针的位置。

经过一翻查找,未果。
现在可以知道的是:当环境变量空间超过一定容量后,起始地址就从:008e0000H开始,连续存放,开启变量延迟后,最新活动变量在最后,各个环境变量所占内存最小单位为10000H,可以从008e0000H开始一直接搜索到最活动环境变量为止,来找到当前活动变量段的地址,只是效率问题。
最好的方法还是能找到存放指针的位置。

TOP

已经成功找到存放活动环境变量指针的线性地址了,
并且已经更新mach.exe
欢迎大家继续测试。

re 523066680
你的“贪吃蛇”要是用mach取键盘输入,速度可以翻倍哦

TOP

返回列表