c语言屏蔽用户ctrl c,如何禁止使用Ctrl键

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

谢谢大家!

回12楼:CTRL的ASCII不知道,呵呵,笨笨,而且可能也不能屏掉,它的优先级太高了!

PS:我之所以问这个问题,主要是前几天看到一篇文章,它用汇编指令禁止Pause键!原文如下:

怎样防止用户用Cl Break键中止程序的运行?

在缺省情况下,MS—DOS允许用户按Cl Break键来中止程序的运行。在大多数情况下,这是一种很有用的功能,它使用户能从程序不允许退出的地方退出程序,或者从一个运行已经失常的程序中退出。

但是,在某些情况下,这种操作是非常危险的。有些程序一旦被中止,可能就会采取“保护”措施,从而使用户能侵入保密数据区。此外,如果程序在更新磁盘上的数据文件时被中止,很可能就会毁坏数据文件,从而毁掉一些有用的数据。

基于这些原因。在某些程序中,解除Break键的功能是很有必要的。警告:在不能百分之百地肯定这样的代码能起作用之前,不要轻易把它加到你的程序中去!否则,一旦这段代码有误并且程序在运行时阻塞住,你就不得不重新启动计算机,而这很可能会毁掉最近对程序所作的修改。

下面介绍如何使Break键失效。这是一种特殊的操作,在有些计算机上无法实现,而有些计算机上根本就没有Break键。因此,c语言中没有一条特殊命令用来解除Break键的功能,而且,即使在以MS:DOS为操作系统的计算机上,也没有一种标准的方法来实现这一点。在大多数计算机上,你必须用一条特殊的机器语言命令来实现这一点。下面是一个在MS-DOS中解除Break键功能的函数:

#include

void StopBreak()

{

union REGS in,out;

in.x.ax=0x3301:

in.x.dx=O:

int86(0x21,&in,&out);

}

这个函数要设置一组寄存器,即把3301H赋给ax寄存器,把O赋给dx寄存器。然后,它将通过这些寄存器调用中断21H,从而调用DOS,并通知它不再希望让Break键中止程序的运行。

下面是一个用来测试该函数的程序:

#include

#include

void StopBreak()

{

union REGS in,out:

in.x.ax=Ox3301:

in.x.dx=O:

int86(Ox21,&in,&out):

}

int main()

{

int a:

long b:

StopBreak();

for(a=O;a<100; a)

{

StopBreak();

printf("Line %d.\n",a);

for(b=O;b<500000L; b);

}

return O:

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值