中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 关于实现P全屏幕的多种方法筛选[slore来解决联网问题]
« [1] [2] »
作者:
标题: 关于实现P全屏幕的多种方法筛选[slore来解决联网问题] 上一主题 | 下一主题
dosmania
初级用户





积分 172
发帖 54
注册 2007-1-2
状态 离线
『楼 主』:  关于实现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 ]

2007-9-22 04:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  

都需要2次运行……你发的那个debug你没有看到exit?和%ComSpec%么?

2007-9-22 13:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dosmania
初级用户





积分 172
发帖 54
注册 2007-1-2
状态 离线
『第 3 楼』:  

我知道是需要两次运行。
用start 新开窗口运行批处理本身的话是会重新读取注册表相关设置的,
所以start 出来的窗口会是全屏幕的
问题是,如何在用start 新开一个窗口之后,也同时关掉原来那个窗口啊
这是以假乱真的做法啊,主要是不想关掉再去打开一次才能实现全屏幕啊``

2007-9-22 18:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 4 楼』:  

给BAT一个参数……

通过参数判断是第一次还是第2次……

没有参数的时候修改注册表……然后exit调用自己+参数

2007-9-22 19:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 5 楼』:  



  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"




2007-9-22 20:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yoyodos
初级用户




积分 128
发帖 59
注册 2007-9-15
状态 离线
『第 6 楼』:  

楼主也是个爱较真的人,哈哈 ,学习一下

2007-9-22 23:15
查看资料  发送邮件  发短消息 网志  OICQ (52721292)  编辑帖子  回复  引用回复
dosmania
初级用户





积分 172
发帖 54
注册 2007-1-2
状态 离线
『第 7 楼』:  

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 ]

2007-9-23 00:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 8 楼』:  



  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 ]



2007-9-23 03:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 9 楼』:  

dosmania:
不要较真了……

你才是“错”的……
可能运行环境不同,xp系统直接在console下……

不过要说的一点我的意思不是判断注册表……

if "%1"=="" goto FullScreen:
全屏模式下的代码……

Goto EOF
:FullScreen
这里改注册表FS为1然后exit然后随便调用自己给个参数……


要做的好的话,就把读取的注册表值传给你的P,在P最后还原成默认值


(如果方便的话,直接打包一个快捷方式……快捷方式上CMD的启动设置为全屏)

2007-9-23 09:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 10 楼』:  

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


2007-9-23 12:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 11 楼』:  

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


2007-9-23 13:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 12 楼』:  

不错,不过倒数第二条语句的%0不需要双引号,如果%0含有空格,cmd会自动预处理为加了双引号的路径,加了双引号反而容易出错。

   此帖被 +6 点积分       点击查看详情   
评分人:【 dosmania 分数: +1  时间:2007-9-23 17:28
评分人:【 HAT 分数: +5  时间:2007-9-23 21:39


2007-9-23 13:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 13 楼』:  

呵呵,那个是直接复制的……
恩,发现EOF在全屏不退出……改了下……

  Quote:

  1. @echo off
  2. if "%1"=="" goto :FullScreen
  3. ::还原显示模式
  4. REG Add HKEY_CURRENT_USER\Console /v FullScreen /t REG_DWORD /d %1 /f>nul

  5. ::全屏状态下代码段
  6. echo Welcome to Full Screen
  7. echo 按任意键退出. . .
  8. pause>nul
  9. Goto :End

  10. :FullScreen
  11. ::查询显示模式
  12. Set ShowMode=0
  13. for /f "delims=" %%i in ('REG QUERY HKEY_CURRENT_USER\Console /v "FullScreen"') do (
  14. Set ShowMode=%%i
  15. )
  16. Set ShowMode=%ShowMode:~-1%
  17. ::设置显示模式为全屏
  18. REG Add HKEY_CURRENT_USER\Console /v FullScreen /t REG_DWORD /d 1 /f>nul
  19. ::全屏启动当前Bat脚本
  20. start "" %0 %ShowMode%
  21. :End
  22. exit
        Slore发表于:  2007-09-23  13:59



   此帖被 +7 点积分        点击查看详情   
评分人:【 dosmania 分数: +2  时间:2007-9-23 17:27
评分人:【 HAT 分数: +5  时间:2007-9-23 21:39


2007-9-23 14:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dosmania
初级用户





积分 172
发帖 54
注册 2007-1-2
状态 离线
『第 14 楼』:  

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 ]

2007-9-23 17:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 15 楼』:  

//不过倒数第二条语句的%0不需要双引号,如果%0含有空格,cmd会自动预处理为加了双引号的路径,加了双引号反而容易出错。

好好学习 天天向上

2007-9-23 21:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: