标题: 关于实现P全屏幕的多种方法筛选[slore来解决联网问题]
[打印本页]
作者: dosmania
时间: 2007-9-22 04:30
标题: 关于实现P全屏幕的多种方法筛选[slore来解决联网问题]
echo exit|%ComSpec% /k prompt e 100 B4 00 B0 12 CD 10 B0 03 CD 10 CD 20 $_g$_q$_|debug>nul
chcp 437>nul
graftabl 936>nul
这是大家知道的实现全屏幕的代码,用了一下,发现以下问题:
1. 实现全屏幕后字体外观很差,有种被压扁的感觉
2. 光标的移动会被完全显示出来,输出空格的时候光标显示出来了不好看
3. 最严重的一个问题,ping 是能ping到外网,无法使用VBS联网。
比如在CMD下载网页源代码的VBS在这个全屏幕模式下用不了,我已测试过。
4. 好象被卡巴报出”改变输入输出方向。。。“
第二种实现全屏幕的方法:
按ALT+ENTER ,这个也是大家知道的,用这种方法完全没有以上提到的四个问题。不过,大家不知道有没有办法使用用ALT+ENTER全屏幕,要自动的,不要人为去按的。
第三种实现全屏幕的方法:
这种是永久全屏幕的,改注册表以下键值:
HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe
"FullScreen"=dword:00000001
若没有%SystemRoot%_system32_cmd.exe 这个子项则新建一个。
通过这种方法实现的全屏幕模式和第二种有完全一样的效果,只是全屏幕是永久的,除非你改回FullScreen 的值为 0
那么能否让批处理文件一开始运行就改了注册表 FullScreen的值呢?
答案是肯定的,但是一开始打开的批处理程序内存不会刷新
也就是说,一开始打开就算你改了注册表也是实现不了全屏幕的,下次启动批处理才会实现全屏幕```所以,希望有达人能解决这个问题
我想要的是不需要第二次运行就能实现全屏幕,或者有人告诉我这是永远无法实现的,好让我死了这个心也行,不过要有根据。
---------------------------------------------------------------
初步解决办法见13楼
缺陷: 我发现修改注册表那种方法联网出现了点问题,具体见下面贴子:
http://www.cn-dos.net/forum/viewthread.php?tid=33750&fpage=1
[
Last edited by dosmania on 2007-9-23 at 08:07 PM ]
作者: slore
时间: 2007-9-22 13:06
都需要2次运行……你发的那个debug你没有看到exit?和%ComSpec%么?
作者: dosmania
时间: 2007-9-22 18:37
我知道是需要两次运行。
用start 新开窗口运行批处理本身的话是会重新读取注册表相关设置的,
所以start 出来的窗口会是全屏幕的
问题是,如何在用start 新开一个窗口之后,也同时关掉原来那个窗口啊
这是以假乱真的做法啊,主要是不想关掉再去打开一次才能实现全屏幕啊``
作者: slore
时间: 2007-9-22 19:06
给BAT一个参数……
通过参数判断是第一次还是第2次……
没有参数的时候修改注册表……然后exit调用自己+参数
作者: zh159
时间: 2007-9-22 20:53
Quote: |
Originally posted by slore at 2007-9-22 19:06:
给BAT一个参数……
通过参数判断是第一次还是第2次……
没有参数的时候修改注册表……然后exit调用自己+参数 |
|
不用判断第一次还是第2次,只要用REG QUER判断是否有该键值来处理
例
REG QUERY HKEY_CURRENT_USER\Console /s|findstr "FullScreen"
作者: yoyodos
时间: 2007-9-22 23:15
楼主也是个爱较真的人,哈哈 ,学习一下
作者: dosmania
时间: 2007-9-23 00:24
TO all above:
REG QUERY HKEY_CURRENT_USER\Console /s|findstr "FullScreen"
这样的代码我还不会判断么```其实你这里写错了
REG QUERY HKEY_CURRENT_USER\Console\%%SystemRoot%%_system32_cmd.exe /s|findstr "FullScreen"
这样才对!
各位不要光一堆理论,要实际测试一下就知道你们的理论行不行得通了
判断FullScreen,然后有就不用改,没有就改,一般情况下是没有全屏幕的,
那我们不管他本来有没有,直接改FullScreen为1就可以了
只是你是运行了 批处理之后才改到注册表的,那你运行批处理之前要先读注册表的Fullscreen的嘛,若本来是0的话,你的批处理就会是默认窗口运行的,后面你怎么改注册表都只会在下次运行批处理才生效或者start出一个批处理,这时就能实现全屏幕了,只是原来那个批处理要怎么关掉!
[
Last edited by dosmania on 2007-9-23 at 01:16 AM ]
作者: zh159
时间: 2007-9-23 03:21
Quote: |
Originally posted by dosmania at 2007-9-23 00:24:
TO all above:
REG QUERY HKEY_CURRENT_USER\Console /s|findstr "FullScreen" 这样的代码我还不会判断么```其实你这里写错了
... |
|
我已经注明了“
例”,所以仅供参考
正如 slore 的执行命令,判断“FullScreen”数值,如果不为“1”,改为“1”,并start "" "%~nx0"&&exit(退出后自动第二次启动)
如果“FullScreen”数值为“1”,不执行修改命令及start "" "%~nx0"&&exit
[
Last edited by zh159 on 2007-9-23 at 03:22 AM ]
作者: slore
时间: 2007-9-23 09:04
dosmania:
不要较真了……
你才是“错”的……
可能运行环境不同,xp系统直接在console下……
不过要说的一点我的意思不是判断注册表……
if "%1"=="" goto FullScreen:
全屏模式下的代码……
Goto EOF
:FullScreen
这里改注册表FS为1然后exit然后随便调用自己给个参数……
要做的好的话,就把读取的注册表值传给你的P,在P最后还原成默认值
(如果方便的话,直接打包一个快捷方式……快捷方式上CMD的启动设置为全屏)
作者: HAT
时间: 2007-9-23 12:34
slore兄的思路果然高明
@echo off
if "%1"=="" goto :FullScreen
echo welcom to full screen
pause
goto :eof
:FullScreen
reg add HKEY_CURRENT_USER\Console /v FullScreen /t REG_DWORD /d 1 /f
start "" "%0" 1
exit
作者: slore
时间: 2007-9-23 13:40
HAT看懂我的意思了……
恩,写个完整的吧~
@echo off
if "%1"=="" goto :FullScreen
::还原显示模式
reg add HKEY_CURRENT_USER\Console /v FullScreen /t REG_DWORD /d %1 /f>nul
::全屏状态下代码段
echo Welcome to Full Screen
pause
goto :EOF
:FullScreen
::查询显示模式
Set ShowMode=0
for /f "delims=" %%i in ('REG QUERY HKEY_CURRENT_USER\Console /v "FullScreen"') do (
Set ShowMode=%%i
)
Set ShowMode=%ShowMode:~-1%
::设置显示模式为全屏
reg add HKEY_CURRENT_USER\Console /v FullScreen /t REG_DWORD /d 1 /f>nul
::全屏启动当前Bat脚本
start "" "%0" %ShowMode%
exit
作者: lxmxn
时间: 2007-9-23 13:51
不错,不过倒数第二条语句的%0不需要双引号,如果%0含有空格,cmd会自动预处理为加了双引号的路径,加了双引号反而容易出错。
作者: slore
时间: 2007-9-23 14:11
呵呵,那个是直接复制的……
恩,发现EOF在全屏不退出……改了下……
Quote: |
- @echo off
- if "%1"=="" goto :FullScreen
- ::还原显示模式
- REG Add HKEY_CURRENT_USER\Console /v FullScreen /t REG_DWORD /d %1 /f>nul
- ::全屏状态下代码段
- echo Welcome to Full Screen
- echo 按任意键退出. . .
- pause>nul
- Goto :End
- :FullScreen
- ::查询显示模式
- Set ShowMode=0
- for /f "delims=" %%i in ('REG QUERY HKEY_CURRENT_USER\Console /v "FullScreen"') do (
- Set ShowMode=%%i
- )
- Set ShowMode=%ShowMode:~-1%
- ::设置显示模式为全屏
- REG Add HKEY_CURRENT_USER\Console /v FullScreen /t REG_DWORD /d 1 /f>nul
- ::全屏启动当前Bat脚本
- start "" %0 %ShowMode%
- :End
- exit
Slore发表于: 2007-09-23 13:59 |
|
作者: dosmania
时间: 2007-9-23 17:27
slore 的方法妙啊~~~
我一直都以为start 新窗口后会等新窗口代码执行完后才执行 exit,晕``
原来可以同步执行,因为是在不同的内存空间里运行的对吧``
还原模式的设计也精彩啊``哈哈
%SystemRoot%_system32_cmd.exe
这个项是我在CMD窗口修改全屏属性后注册表里自动建的吖,原来console里的fullscreen也行,神奇收下了,多谢各位关注。。
另外,%SystemRoot%_system32_cmd.exe 是修改CMD.exe
直接修改console是修改那个命令提示符的
[
Last edited by dosmania on 2007-9-23 at 08:42 PM ]
作者: HAT
时间: 2007-9-23 21:38
//不过倒数第二条语句的%0不需要双引号,如果%0含有空格,cmd会自动预处理为加了双引号的路径,加了双引号反而容易出错。
好好学习 天天向上
作者: qzwqzw
时间: 2010-5-1 11:38
修改了全屏切换显示代码
主要是对注册表的对应键值进行了现场保护
同时使用start加标题切换显示模式上更为简单和灵活
也不影响批处理自身命令行参数的分析
@echo off & setlocal
if "%ShowMode%"=="FullScreen" goto :FullScreen
if "%ShowMode%"=="WindowMode" goto :WindowMode
REG Add HKCU\Console\FullScreen /v FullScreen /t REG_DWORD /d 1 /f>nul
REG Add HKCU\Console\WindowMode /v FullScreen /t REG_DWORD /d 0 /f>nul
set InitMode=true
echo 演示即将开始,首先将进入全屏模式
pause
set ShowMode=FullScreen
start "FullScreen" %0 %*
goto :end
:FullScreen
echo 这是在全屏显示模式下工作
echo Working in full screen mode.
echo 现在将返回普通窗口模式
pause
set ShowMode=WindowMode
start "WindowMode" %0 %*
goto :end
:WindowMode
echo 这是在窗口显示模式下工作
echo Working in normal window mode.
echo 显示结束,即将退出
pause
goto :end
:end
REG delete HKCU\Console\FullScreen /f>nul
REG delete HKCU\Console\WindowMode /f>nul
exit