中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-02 06:39
48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,250 会员排行
DOS批处理 & 脚本技术(批处理室) » [高手请进]关于Ctrl+C和Ctrl+Break的屏蔽问题
可打印版本  1,940 / 13
第1楼 fornever 发表于 2006-09-15 10:08
初级用户 发帖 35 积分 98
[高手请进]关于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 ]
第2楼 fornever 发表于 2006-09-16 08:31
初级用户 发帖 35 积分 98
晕 没有人回复...
如果可以的话,希望可以给出批处理下的ctrl+c和ctrl+break的写法
高手斑竹谁的说两句啊!
第3楼 electronixtar 发表于 2006-09-16 08:41
铂金会员 发帖 2,672 积分 7,493
XP下……不可能的吧,就像Ctrl+Alt+Del一样是系统的不用API和hook估计很难改
第4楼 fornever 发表于 2006-09-19 21:27
初级用户 发帖 35 积分 98
哪位高手可以给出修改command或者其他程序来实现的方法
汇编应该可以做到吧
第5楼 electronixtar 发表于 2006-09-19 22:40
铂金会员 发帖 2,672 积分 7,493
寒~~~都改cmd.exe了为什么还写批处理哦?直接汇编写exe了嘛,晕
第6楼 NaturalJ0 发表于 2006-09-21 20:15
银牌会员 发帖 533 积分 1,181
command /c 或 CMD /C 可以间接的解决部分问题

[ Last edited by NaturalJ0 on 2006-9-21 at 20:16 ]
第7楼 fornever 发表于 2006-09-24 09:16
初级用户 发帖 35 积分 98
用exe 也无所了
我的初衷是用纯批处理,看来不太好实现,还希望高手给出具体解决方法!
或者是这样也行,当用户按下Ctrl+C或者Ctrl+Break的时候自动退出批处理所运行的cmd窗口,就是说这个批处理不是直接双击运行的,而是先打开cmd后,在cmd中运行的。
第8楼 fornever 发表于 2006-09-28 09:19
初级用户 发帖 35 积分 98
希望看到高手对于这个问题的讨论,就算得不到解决也是有价值的!
第9楼 redtek 发表于 2006-09-28 09:30
金牌会员 发帖 1,147 积分 2,902
一定要禁掉Ctrl+C和Ctrl+Break键这么重要?要做哪方面的批处理?
第10楼 fornever 发表于 2006-09-28 09:40
初级用户 发帖 35 积分 98
希望别人按我批处理的流程运行,不希望被异常中断掉.
第11楼 electronixtar 发表于 2006-09-28 09:44
铂金会员 发帖 2,672 积分 7,493
我认为cmd只是windows一个程序而已,不可能屏蔽的。批处理只是一个对cmd的“建议“,而不是”命令“
第12楼 redtek 发表于 2006-09-29 11:35
金牌会员 发帖 1,147 积分 2,902
我试了一下,先用WINDOWS兼容性设置CMD.exe强制兼容WIN98,但BREAK无效。

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

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

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

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

我下面的试验仅仅是试验,并没带参数,理论上是否行不太清楚:)


第13楼 redtek 发表于 2006-09-29 11:53
金牌会员 发帖 1,147 积分 2,902
如果是一个名为 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是不是有一个限制,不过,如果用户既然是这么让人讨厌,那么你可以使出格了它硬盘~!


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



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

我晕了,你自己试吧~:)
第14楼 zhengguobin 发表于 2006-09-30 09:24
新手上路 发帖 1 积分 2
有没有方便快捷的方法?
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023