是否存在中断服务程序来帮助我清除终端屏幕?它会在Windows上运行吗?
答案 0 :(得分:14)
通过BIOS设置图形模式(int 10h,AH = 0)将清除屏幕。
通过BIOS向上或向下滚动屏幕(在AH = 6或7的情况下为10h)也可以清除屏幕。
这仅适用于可以调用BIOS服务功能的地方。
MSDOS始终可以使用。
在Windows中,这仅适用于DOS应用程序,如果Windows可以实际运行它们。 64位版本的Windows根本不支持DOS应用程序,从Windows Vista开始,即使在32位版本的Windows中,许多DOS应用程序也无法完全运行。
还要记住,如果DOS应用程序在Windows窗口中运行,则只会清除该窗口,而不是整个屏幕。
答案 1 :(得分:3)
我让这个工作(使用qemu,NASM)
(http://www.gabrielececchetti.it/Teaching/CalcolatoriElettronici/Docs/i8086_and_DOS_interrupts.pdf)
call cls
jmp $
cls:
pusha
mov ah, 0x00
mov al, 0x03 ; text mode 80x25 16 colours
int 0x10
popa
ret
答案 2 :(得分:2)
在装配中,试试这个:
mov ah, 0x06
mov al, 0
int 10h
不,你不能在Windows上这样做。此代码只能用于引导加载程序和汇编内核(仅限16位,警告:不要尝试32位!!!)
如果您想在Windows(控制台应用程序)中执行此操作,请尝试以下操作:
//YOU SHOULD INCLUDE STDIO.H and CONIO.H. You should also type:
//using namespace std
system("cls");
//You should imports System and other Default namespaces
shell("cls")
System.Diagnostics.Proccess.Start("CMD.exe /c cls");
注意:我认为我们不能使用C#或VB制作控制台应用程序。当然,我从未尝试过。只是说。但这些代码仅适用于Windows。
答案 3 :(得分:0)
对于Windows控制台应用程序,在普通C:
中#include <tchar.h>
#include <wincon.h>
VOID
ClearScreen(HANDLE hConsoleOutput)
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
COORD coPos;
DWORD dwWritten;
GetConsoleScreenBufferInfo(hConsoleOutput, &csbi);
coPos.X = 0;
coPos.Y = 0;
FillConsoleOutputAttribute(hConsoleOutput, csbi.wAttributes,
csbi.dwSize.X * csbi.dwSize.Y,
coPos, &dwWritten);
FillConsoleOutputCharacter(hConsoleOutput, TEXT(' '),
csbi.dwSize.X * csbi.dwSize.Y,
coPos, &dwWritten);
SetConsoleCursorPosition(hConsoleOutput, coPos);
}
...
// In your main code:
/* Clear the full console screen */
ClearScreen(hOutput);
其中hConsoleOutput
是控制台屏幕缓冲区的HANDLE(通过GetStdHandle(STD_OUTPUT_HANDLE)
或CreateConsoleScreenBuffer(...)
或其他方式获得。
这个函数的作用是,首先,检索当前控制台屏幕缓冲区信息(包含其当前大小),然后使用默认文本属性和空格填充整个屏幕缓冲区,最后将光标放在(0, 0)。