发信人: 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分经验值。真是赚翻了! |
|