永发信息网

在批处理中如何禁止使用ctrl+c?

答案:2  悬赏:50  手机版
解决时间 2021-02-27 01:59
  • 提问者网友:伴风望海
  • 2021-02-26 18:46
在批处理中如何禁止使用ctrl+c?
最佳答案
  • 五星知识达人网友:雾月
  • 2021-02-26 19:52
2008-1-24就有人在知道上问了这个问题,当时就是我回答的。给你找了出来你看看吧。

内存驻留程序的资料可以从网上搜索。
至于Ctrl-C(Ctrl-Break)的处理,我查了一下资料,一种方法是使用DOS功能调用33h,使Ctrl-C检测失效,入口参数AH=33H,AL=0检查Ctrl-C的当前状态,功能调用后的状态结果返回放在DL中;AL=1设置Ctrl-C的状态,此时DL中必须有设置所需的状态值,DL=0为关闭Ctrl-C处理,DL=1为打开Ctrl-C处理。
另一种方法是截获Ctrl-C处理中断,只要在键盘或在某个文件或设备字符流处检测到一个Ctrl-C,则某个处理程序(下面代码中用Brk_Routine来表示)将获得控制。
mov ah,25h ;设置中断
mov al,23h ;Ctrl-C处理程序中断向量
mov dx,seg Brk_Routine ;DS:DX=处理程序地址
mov ds,dx
mov dx,offset Brk_Routine
int 21h ;调用DOS改变此向量
Brk_Routine: iret ;DOS检测到Ctrl-C后调用的处理程序,这里的iret只是做立即返回,故Ctrl-C仍留键盘输入流中,并将应用程序下一次从键盘请求字符时传送过去(屏幕显示为^C),如果想执行一些代码,则在iret前加入即可。应用程序结束后,DOS根据PSP中保存的信息自动恢复Int 23h向量以前的内容。
此外,还有一个对Ctrl-Break专门处理的向量Int 1Bh,一般来说,不能把Int 23h编写的处理程序用于Int 1Bh,Int 1Bh使用起来更受到限制,因为它是作为一个硬件中断的结果被调用的,而在发出此中断时有可能正在执行一段非常重要的代码。另外,除CS:IP以外的所有寄存器都处于未知状态,如果不能正确处理此前的堆栈和向量,则会很有可能导致系统死机。
全部回答
  • 1楼网友:愁杀梦里人
  • 2021-02-26 20:03
搂主的愿望可能不会实现了 其一:批处理程序是顺序执行的,也就说不允许我们随心所欲的输入信息与程序交互。所以也就不可能“一但使用ctrl+c就会自动关闭整个cmd程序的程序”。 其二:批处理程序中除了命令pause外,任何输入都需要以回车结束,所以只按ctrl+c是不可能有效果的,必须回车告知系统才能起效。 其三:搂主的愿望有点绕远,实际上在批处理过程中,我们随时都可以点右上角的叉叉来立即结束批处理,并不会提示是否终止的询问。 其四:在dos中,按ctrl+c时,其功能是清除当前的输入而另起一行等待输入。像ctrl+v则在dos中显示为^v
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯