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

[其他] 全屏运行批处理的方法总结及原理简介

【方案一】debug
  1. @echo off
  2. echo exit|%ComSpec% /k prompt e 100 B4 00 B0 12 CD 10 B0 03 CD 10 CD 20 $_g$_q$_|debug>nul
  3. chcp 437 >nul
  4. graftabl 936 >nul
  5. echo Welcome to full screen mode... 坚持全屏运行批处理,不动摇、不懈怠、不折腾。
  6. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7. rem 把你自己需要的代码写到这里
  8. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  9. pause
复制代码
原理讲解:

1、e是debug的修改命令,用于修改内存单元的内容。这里的e 100是编辑ds:0100的内容(这点不详细说了)

2、B4 00 B0 12 CD 10 B0 03 CD 10 CD 20 这些是机器码,这些机器码转化为汇编语言就成了:
MOV AH,00
MOV AL,12
INT 10
MOV AL,03
INT 10
INT 20
这段汇编主要运用了10号中断的00h号功能调用。这里调用了两次,其实一次就可以实现。
MOV AH,00
MOV AL,12
INT 10
INT 20
寄存器AH里的值代表了10号中断的功能调用,这里是00h。如果没记错的话12代表640×400黑白文字。int 20是调用20号中断将控制权交给dos。所谓中断就相当于调用固有的子程序。

3、$_是换行。

4、g是debug的运行命令,q是debug的退出命令。
【方案二】调用XP系统自带的reg命令设置注册表(运行完毕之后会恢复注册表)
  1. @echo off
  2. if "%1"=="" (
  3.   goto :FullScreen
  4. )
  5. reg add HKEY_CURRENT_USER\Console /v FullScreen /t REG_DWORD /d %1 /f>nul
  6. echo Welcome to full screen mode... 坚持全屏运行批处理,不动摇、不懈怠、不折腾。
  7. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  8. rem 把你自己需要的代码写到这里
  9. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  10. goto :end
  11. :FullScreen
  12. set OriginalMode=0
  13. for /f "delims=" %%i in ('REG QUERY HKEY_CURRENT_USER\Console /v FullScreen') do (
  14.   set OriginalMode=%%i
  15. )
  16. set OriginalMode=%OriginalMode:~-1%
  17. reg add HKEY_CURRENT_USER\Console /v FullScreen /t REG_DWORD /d 1 /f>nul
  18. start "" %0 %OriginalMode%
  19. goto :eof
  20. :end
  21. pause
  22. exit
复制代码
【方案三】调用临时VBS代码(目的在于摆脱对reg命令的依赖)设置注册表(运行完毕之后会恢复注册表)
  1. @echo off
  2. if "%1"=="" (
  3.   goto :FullScreen
  4. )
  5. >"%temp%\RestoreMode.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
  6. >>"%temp%\RestoreMode.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Console\FullScreen", "%1", "REG_SZ"
  7. cscript /nologo "%temp%\RestoreMode.vbs"
  8. echo Welcome to full screen mode... 坚持全屏运行批处理,不动摇、不懈怠、不折腾。
  9. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  10. rem 把你自己需要的代码写到这里
  11. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  12. goto :end
  13. :FullScreen
  14. set OriginalMode=0
  15. >"%temp%\BackupMode.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
  16. >>"%temp%\BackupMode.vbs" echo WScript.Echo WshShell.RegRead ("HKEY_CURRENT_USER\Console\FullScreen")
  17. for /f %%a in ('cscript /nologo "%temp%\BackupMode.vbs"') do (
  18.   set "OriginalMode=%%a"
  19. )
  20. >"%temp%\FullMode.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
  21. >>"%temp%\FullMode.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Console\FullScreen", "1", "REG_SZ"
  22. cscript /nologo "%temp%\FullMode.vbs"
  23. start "" %0 %OriginalMode%
  24. goto :eof
  25. :end
  26. pause
  27. exit
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

  1. @echo off
  2. echo exit|%comspec% /k prompt e 100 b4 00 b0 12 cd 10 b0 03 cd 10 cd 20
  3. $_g$_q$_|debug>nul
  4. chcp 437 >nul
  5. graftabl 936 >nul
  6. pause
复制代码
上面的代码不能运行
复制LZ的代码能运行,奇怪啊!明明是一样的啊
仔细一瞧,复制的代码$_g$_q$_|debug>nul是连在上一行后的
但复制到论坛后却变成两行了!所以看上去跟上面的代码一样,其实不一样!
是自动换行的原因吗?

TOP

回复 2楼 的帖子

因为你的文本编辑里面选择了自动换行吧?取消它即可。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3楼 的帖子

不是编辑器有问题!我复制代码下来能运行!
请看你发的代码看上去是不是两行?

TOP

回复 4楼 的帖子

哦,恭喜,能运行就好。
不过你在2楼贴的代码是错的,多了一个回车。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

【方案一】debug

这个方法我用很久了,以前在CN-DOS上看到的~~

TOP

不知道【方案一】debug
会不会对批处理有要求比如变量延迟等等。。。
还求高人解答下

TOP

回复 7楼 的帖子

亲自试试不就知道了?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

也帖个自己用的
  1. @ECHO OFF
  2. REGSVR32 %WINDIR%\SYSTEM32\WSHOM.OCX /S
  3. WMIC /NAMESPACE:\\ROOT\DEFAULT PATH STDREGPROV CALL SETDWORDVALUE ^&H80000001,"CONSOLE","SCREENBUFFERSIZE","19661100" >NUL
  4. IF "%1" == "H" GOTO :LOOP
  5. MSHTA VBSCRIPT:CREATEOBJECT("WSCRIPT.SHELL").RUN("""%~DPNX0"" H",3)(WINDOW.CLOSE)&&EXIT
  6. :LOOP
  7. rem 代码
  8. PAUSE
复制代码

TOP

返回列表