发信人: wenbobo(灌了拂衣去) 
整理人: wenbobo(2002-05-21 12:43:05), 站内信件
 | 
 
 
当我用鼠标点右上的那个X按钮关闭Command的时候,它老实的关闭了,和打exit一
 样;当我在edit里面不存盘就点X按钮时,它会提示我要不要存盘。
 
 以前一直都觉得这很神奇,还以为console程序也有一个消息处理的“后门”。今天
 才知道其实是Windows下DOS虚拟机的中断服务提供的功能:
 
 1)查询状态
 mov ah, 16h   ; Windows多功能函数
 mov al, 8Fh   ; VM关闭功能
 mov dh, 1     ; 询问是否关闭命令
 mov dl, 0     ; 总是为0
 int 2Fh       ; 系统中断服务
 
 如果返回的ax为
 0:已经选择“关闭”命令,且程序没有确认关闭状态
 1:已经选择“关闭”命令,且程序已经确认关闭状态
 2:没有选择“关闭”命令,程序应该继续跑下去
 
 
 2)console程序也可以允许/禁止系统菜单/按钮上的关闭命令
 mov ah, 16h    ; Windows多功能函数 
 mov al, 8Fh    ; VM关闭功能 
 mov dh, 0      ; 允许或禁止关闭命令 
 mov dl, Flags  ; 为0:禁止;为1:允许
 int 2Fh 
 or ax, ax 
 jz success 
 ax=0就成功了
 
 
 3)确认状态
 mov ah, 16h
 mov al, 8Fh
 mov dh, 2
 mov dl, 0      ; always 0 
 int 2Fh 
 or ax, ax 
 jz success ;0表示成功
 如果程序想在退出前取得键盘输入,这一步是必须的。若程序已经被关闭但是还没有
 被确认,所有的键盘读操作将返回NULL,输入行缓冲区也将置为空串。
 
 4)取消关闭
 mov ah, 16h
 mov al, 8Fh
 mov dh, 3      ; Cancel Close 
 mov dl, 0      ; always 0 
 int 2Fh 
 or ax, ax 
 jz success 
 
 
  ---- 哇!又加了1分经验值。真是赚翻了!           | 
 
 
 |