精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>WINDOWS界面设计>>Win32控制台程序的一个小机关

主题:Win32控制台程序的一个小机关
发信人: 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分经验值。真是赚翻了!          

[关闭][返回]