[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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

回复 25楼 的帖子

本顿是个很认真很热血的人,
贪吃蛇嘛,是别人的作品,我是去模仿+尝试。

终究是换了一个环境去描绘其他东西了~

TOP

标题和变量可以指定就好

TOP

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

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

TOP

终于体会到C程序&&**的有多么好了
论坛标题管理观察员

TOP

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


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

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

TOP

我说过有风险吧...
论坛标题管理观察员

TOP

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


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

TOP

回复 19楼 的帖子

这名字起的真好……

TOP

回复 18楼 的帖子

“是男人就下100层”游戏?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

俄罗斯方块实在改不下去了哈,还是先小小的体验一下mach功能先
回忆起一个游戏模式了,一个小人停在一个板上,然后画面不断
地向上,小人必须在不掉如深渊的情况下跳到下一个板块上,
有些板块是带刺的不能跳。
o(∩_∩)o不做,很花时间的
小小体验,把输入信息字符化~
  1. @echo off
  2. if "%~1" equ "net" goto :prar1
  3. start "key" "%~f0" net
  4. set 0=00
  5. title BatHome
  6. rem 测试得知,title应该在赋值0=00后执行
  7.   ::-action-配置一下先
  8.   setlocal enabledelayedexpansion
  9.   set "space="
  10.   for /l %%a in (1,1,79) do (set space=!space! )
  11.   set dotspace=40
  12.   set /a do61=-1,do64=1
  13.   ::下面是显示的循环了
  14. :lp
  15.   echo,!space:~0,%dotspace%!*
  16.   for /l %%a in (1,1,3) do (ping 1 127.1>nul)
  17.   if "!0!" equ "03" (taskkill /fi "WINDOWTITLE eq key*" /im cmd.EXE &exit)
  18.   set /a dotspace+=do!0!
  19.   set 0=00
  20. goto :lp
  21. ::输入框,读取键值并把值赋予环境变量0
  22. :prar1
  23. mode con: cols=20 lines=2
  24. echo;请把我置顶
  25. mach
复制代码

TOP

头痛…… 读到晕了。
打算要测试,在循环中显示按键值,也不知道放哪里好,看跳转看晕了。

TOP

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

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

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

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

TOP

批处理随便一个紧凑的循环,都很占内存的。好像是有堆积作用
@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 编辑 ]

TOP

重新下载了,tit运行正常。俄罗斯方块却玩不了!
有一种爱叫放弃

TOP

返回列表