中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [高手请进]关于Ctrl+C和Ctrl+Break的屏蔽问题
作者:
标题: [高手请进]关于Ctrl+C和Ctrl+Break的屏蔽问题 上一主题 | 下一主题
fornever
初级用户





积分 98
发帖 35
注册 2006-1-14
状态 离线
『楼 主』:  [高手请进]关于Ctrl+C和Ctrl+Break的屏蔽问题

搜索了相关主题和实验后,发现那两个工具Boff.com和Breakoff.com在Xp的cmd下是无效的,呵呵不过斑竹也是这么说的.

我想要自己的批处理运行过程中不被Ctrl+C和Ctrl+Break终止,就在XP的cmd环境下

因为我的set /p var=input:后总是被Ctrl+C和Ctrl+Break终止,
faint!
希望可以找到解决办法,工具或者修改程序都可以
期待高手的答复!

[ Last edited by fornever on 2006-9-16 at 08:36 ]

2006-9-15 10:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fornever
初级用户





积分 98
发帖 35
注册 2006-1-14
状态 离线
『第 2 楼』:  

晕 没有人回复...
如果可以的话,希望可以给出批处理下的ctrl+c和ctrl+break的写法
高手斑竹谁的说两句啊!

2006-9-16 08:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 3 楼』:  

XP下……不可能的吧,就像Ctrl+Alt+Del一样是系统的不用API和hook估计很难改




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-9-16 08:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fornever
初级用户





积分 98
发帖 35
注册 2006-1-14
状态 离线
『第 4 楼』:  

哪位高手可以给出修改command或者其他程序来实现的方法
汇编应该可以做到吧

2006-9-19 21:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 5 楼』:  

寒~~~都改cmd.exe了为什么还写批处理哦?直接汇编写exe了嘛,晕




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-9-19 22:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 6 楼』:  

command /c 或 CMD /C 可以间接的解决部分问题

[ Last edited by NaturalJ0 on 2006-9-21 at 20:16 ]

2006-9-21 20:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fornever
初级用户





积分 98
发帖 35
注册 2006-1-14
状态 离线
『第 7 楼』:  

用exe 也无所了
我的初衷是用纯批处理,看来不太好实现,还希望高手给出具体解决方法!
或者是这样也行,当用户按下Ctrl+C或者Ctrl+Break的时候自动退出批处理所运行的cmd窗口,就是说这个批处理不是直接双击运行的,而是先打开cmd后,在cmd中运行的。

2006-9-24 09:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fornever
初级用户





积分 98
发帖 35
注册 2006-1-14
状态 离线
『第 8 楼』:  

希望看到高手对于这个问题的讨论,就算得不到解决也是有价值的!

2006-9-28 09:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 9 楼』:  

一定要禁掉Ctrl+C和Ctrl+Break键这么重要?要做哪方面的批处理?

2006-9-28 09:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fornever
初级用户





积分 98
发帖 35
注册 2006-1-14
状态 离线
『第 10 楼』:  

希望别人按我批处理的流程运行,不希望被异常中断掉.

2006-9-28 09:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 11 楼』:  

我认为cmd只是windows一个程序而已,不可能屏蔽的。批处理只是一个对cmd的“建议“,而不是”命令“




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-9-28 09:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 12 楼』:  

我试了一下,先用WINDOWS兼容性设置CMD.exe强制兼容WIN98,但BREAK无效。

然后如下做两个批处理,这两个批处理互相CALL,不管按多少次CTRL+C,
只要你CTRL+C中断一个批处理,虽然当前这个批处理被中断了,但它是被CALL的,
所以又返回了调用它的那个批处理。

如果这两个批处理之间在CALL以前和CALL的时候都加上参数,
理论上就应该知道中间这一段批处理是不是被人为的中断了,
如果被人为的中断了,那么

例:
请输入:   (如果这地方被中断了)
(代码区赋值)    (那么在这里是不会被人工赋上值的,
所以,在这后面的CALL  A.BAT  参数
是不会带过去的,所以只要那个被CALL的批处理发现无参数,
就一定是我CALL别人时它中断了我的批处理,然后就可以变向解决了。

(但,如果对方强行用鼠标关掉CMD的WINDOWS窗口,那没折)

我下面的试验仅仅是试验,并没带参数,理论上是否行不太清楚:)
C:\temp\t>copy con a.bat
@echo.
echo is A
echo.
set /p redtek=
call b.bat
^Z
已复制         1 个文件。

C:\temp\t>copy con b.bat
@echo off
echo.
echo is B
set /p redtekk=
call a.bat
^Z
已复制         1 个文件。

C:\temp\t>a


C:\temp\t>echo is A
is A

C:\temp\t>echo.


C:\temp\t>set /p redtek=
dddd

C:\temp\t>call b.bat

is B
dddd

is A

dddd

is B
dddd^C
is A

^C
is B
^C
is A

^C
is B
^C
is A

^C
is B
^C
is A

^C
is B
^C
is A

^C
is B
^C
is A

^C
is B
^C
is A

^C
is B
^C
is A

^C
is B
^C
is A

^C
is B
^C
is A

^C
is B
^C
is A


2006-9-29 11:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 13 楼』:  

如果是一个名为 MAIL.BAT  它是主批处理,
MAIL. bat  里CALL 用于接授用户输入数据的批处理 A.BAT,
在A.BAT内 SET /P  REDTEK= 在取用户输入数据时如果用户不输入就按CTRL+C想中断,
那么……………… (哈哈,行不通,A.bat被中断后它一定会回到MAIL.bat,所以不好办。



========= 这个解决方法决对可以 ==============

即然我们知道了A批处理被中断后会回来,所以只要我们不让它回来!!!

为说这想法时举例方法,暂用中文名举例子,省得来回“换算”。

------------------
MENU.BAT     (用于总批处理主调用者)

监控.BAT     (用于循环监控的批处理,用户不输入数据就老让它输入)

取用户输入.BAT  (用于取用户输入数据的批处理)
-----------------


由 MENU.BAT 初始化一些东东,调用  监控.BAT  ,
为什么?就是想让 “监控.BAT“ 来 CALL “取用户输入.BAT" ,
只有这样,用户如果CTRL+C想中断不想输入数据,
那么这个 “取用户输入.bat” 就一定会回到它的调用者那里(就是“监控.BAT“)。

哈哈……

当 “取用户输入.BAT“ 回来了,但是,它是真的正常回来了吗?
怎么知道它正常回来的,用户是正常输入数据了?
回为 “取用户输入.bat“ 如果是正常返回调用者,就会带参数回来。
我们适先在 "取用户输入.bat“ 批处理的结尾还让它CALL它的调用者(就是死CALL循环),
但是,CALL是带参数的,带用户输入的参数。

互相CALL又怎么能正常退出返回到总MENU.bat呢?
:GOGO 指向最后没有CALL的地方就算是“自然”的退出方式,
既然是自然的退出方式,回到了调用者“监控那里”或“取用户输入.BAT“那里,
当然就可以还是用GOTO来指向正常结束,最后终会回到MENU.BAT

(令:如果用户玩命按CTRL+C怎么办?我不知道返复CALL是不是有一个限制,不过,如果用户既然是这么让人讨厌,那么你可以使出格了它硬盘~!


…………大概就是这意思,我晕了!!!!



只能起到暂时让用户输入一部分数据,

我晕了,你自己试吧~:)

2006-9-29 11:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhengguobin
新手上路





积分 2
发帖 1
注册 2006-9-29
状态 离线
『第 14 楼』:  

有没有方便快捷的方法?

2006-9-30 09:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: