![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-10-31 19:11 |
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 如何编程关闭显示器? |
| 可打印版本 4,601 / 18 |
| 第1楼 dsysps | 发表于 2007-02-02 01:11 |
| 初级用户 发帖 34 积分 98 | |
|
如何编程关闭显示器? 项目中需要程序中定时关闭显示器,请问如何实现?
|
|
| 第2楼 Michael | 发表于 2007-02-02 12:41 |
| 钻石会员 发帖 3,041 积分 10,056 | |
|
改变它的power scheme,不过在dos下没试过
|
|
| 第3楼 zhgwbzhd | 发表于 2007-02-05 11:07 |
| 高级用户 发帖 187 积分 506 | |
|
是给他断电吗?估计困难点。
如果使用显示输出的中断,应该可以得了 |
|
| 第4楼 dsysps | 发表于 2007-03-15 21:57 |
| 初级用户 发帖 34 积分 98 | |
|
BYTE vga_mode[64*2];
BYTE mode_bak[64*2]; void SaveMode() { union REGS r; r.x.ax=0x4f04; r.x.dx=0x0001; r.x.cx=0x0001; _ES=FP_SEG(vga_mode); r.x.bx=FP_OFF(vga_mode); int86(0x10,&r,&r); for(i=0;i<64*2;i++) mode_bak[i]=0x00; } //bClose=1:关闭显示;bClose=0:打开显示 void OpenClose(BYTE bClose) { BYTE far * pp; pp=mode_bak; if(bClose==0) { pp=vga_mode; } union REGS r; r.x.ax=0x4f04; r.x.dx=0x0002; _ES=FP_SEG(pp); r.x.bx=FP_OFF(pp); r.x.cx=0x0001; int86(0x10,&r,&r); } |
|
| 第5楼 wzsunlight | 发表于 2007-03-22 17:46 |
| 初级用户 发帖 52 积分 107 | |
|
同意以上观点
|
|
| 第6楼 CrispH | 发表于 2007-10-26 16:31 |
| 初级用户 发帖 49 积分 108 | |
|
在 DOS 下关闭和打开显示器!
; ; Turn Off Video ; call disable_video_display_3c0 call disable_video_display_3c4 call disable_horz_vert_retrace ; ; Turn On Video ; call enable_horz_vert_retrace call enable_video_display_3c0 call enable_video_display_3c4 IO_DELAY MACRO push ax in al, 061H pop ax ENDM disable_video_display_3c0 PROC NEAR PUBLIC push ax mov ah, 00000000b jmp enable_display_3c0_00 disable_video_display_3c0 ENDP enable_video_display_3c0 PROC NEAR PUBLIC push ax mov ah, 00100000b enable_display_3c0_00:: call video_display_3c0_on_off pop ax ret enable_video_display_3c0 ENDP attribute_addr_reg dW 03c0h input_status_reg_1_color_reg dW 03dah input_status_reg_1_mono_reg EQU 03bah video_display_3c0_on_off PROC NEAR PUBLIC push dx call clear_attribute_flipflop mov dx, attribute_addr_reg in al, dx and al, 11011111b or al, ah call clear_attribute_flipflop out dx, al pop dx ret video_display_3c0_on_off ENDP clear_attribute_flipflop PROC NEAR PUBLIC push ax push dx mov dx, input_status_reg_1_color_reg in al, dx IO_DELAY mov dl, low input_status_reg_1_mono_reg in al, dx pop dx pop ax ret clear_attribute_flipflop ENDP disable_video_display_3c4 PROC NEAR PUBLIC push ax mov ah, 00100000b jmp enable_display_3c4_00 disable_video_display_3c4 ENDP enable_video_display_3c4 PROC NEAR PUBLIC push ax mov ah, 00000000b enable_display_3c4_00:: call video_display_3c4_on_off pop ax ret enable_video_display_3c4 ENDP sequencer_addr_reg dW 03c4h clocking_mode_reg_idx db 01h video_display_3c4_on_off PROC NEAR PUBLIC push dx mov dx, sequencer_addr_reg in al, dx IO_DELAY push ax mov al, clocking_mode_reg_idx out dx, al IO_DELAY inc dx in al, dx and al, 11011111b ;---------------------------------------; enb_dis_horz_vert_retrace_10:: or al, ah out dx, al IO_DELAY dec dx pop ax out dx, al pop dx ret video_display_3c4_on_off ENDP disable_horz_vert_retrace PROC NEAR PUBLIC push ax mov ah, 00000000b jmp enable_horz_vert_retrace_00 disable_horz_vert_retrace ENDP enable_horz_vert_retrace PROC NEAR PUBLIC push ax mov ah, 10000000b enable_horz_vert_retrace_00:: call enb_dis_horz_vert_retrace pop ax ret enable_horz_vert_retrace ENDP miscellaneous_out_reg_read_mode dW 03cch crt_addr_reg_mono EQU 03b4h crt_addr_reg_color EQU 03d4h crtc_mode_cntl_reg_index db 017h enb_dis_horz_vert_retrace PROC NEAR PUBLIC push dx mov dx, miscellaneous_out_reg_read_mode in al, dx test al, 00000001b mov dl, low crt_addr_reg_mono jz enb_dis_horz_vert_retrace_01; mov dl, low crt_addr_reg_color enb_dis_horz_vert_retrace_01: in al, dx IO_DELAY push ax mov al, crtc_mode_cntl_reg_index out dx, al IO_DELAY inc dx in al, dx and al, 01111111b jmp enb_dis_horz_vert_retrace_10 enb_dis_horz_vert_retrace ENDP [ Last edited by CrispH on 2007-10-26 at 04:41 PM ] |
|
| 第7楼 jojand | 发表于 2007-10-30 14:24 |
| 初级用户 发帖 57 积分 117 | |
|
执行以下的代码将关闭屏幕显示,键入任意键后开启屏幕显示:
mov ax,1201 mov bl,36 int 10 mov ax,0 int 16 mov ax,1200 mov bl,36 int 10 |
|
| 第8楼 CrispH | 发表于 2007-10-30 18:22 |
| 初级用户 发帖 49 积分 108 | |
|
INT 10H, AH = 12H, BL = 36, AL = 01 --> Video Refresh Disable
INT 16H, AH = 00H --> Waiting for keypress INT 10H, AH =12H, BL = 36, AL = 00 --> Video Refresh Enable |
|
| 第9楼 bd123456789 | 发表于 2008-01-11 21:58 |
| 中级用户 发帖 216 积分 360 | |
|
测试出错 上面几位的代码我测试了几个,发现都不能正常关闭!
|
|
| 第10楼 CrispH | 发表于 2008-02-18 18:25 |
| 初级用户 发帖 49 积分 108 | |
|
真的吗?我测试了, 可以关闭,也可以开启啊!
|
|
| 第11楼 Sufone | 发表于 2008-02-18 19:01 |
| 中级用户 发帖 124 积分 256 | |
|
7楼的肯定可以
|
|
| 第12楼 dy2003310 | 发表于 2008-02-24 01:26 |
| 初级用户 发帖 68 积分 180 来自 China | |
|
请教 7楼兄的在偶xp上测试不成功
|
|
| 第13楼 Sufone | 发表于 2008-02-27 22:22 |
| 中级用户 发帖 124 积分 256 | |
|
XP接管了屏幕中断,在全屏模式的CMD中可以。
|
|
| 第14楼 geffhv | 发表于 2008-02-29 16:12 |
| 社区乞丐 发帖 8 积分 -51 来自 四川省南充市嘉陵区 | |
|
汇编在不同的机器上结果可能是不同的吗?》
|
|
| 第15楼 Sufone | 发表于 2008-03-01 11:12 |
| 中级用户 发帖 124 积分 256 | |
|
只要DOS能运行,那就肯定可以
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |