是否存在中断服务程序以帮助我清除终端屏幕?它在Windows上能正常工作吗?
通过BIOS(int 10h,AH = 0)设置图形模式会清除屏幕。
通过BIOS(int 10h,AH = 6或7)将屏幕向上或向下滚动也可以清除屏幕。
这仅适用于可以调用BIOS服务功能的地方。
在MSDOS中,这将始终起作用。
在Windows中,这仅适用于DOS应用程序,并且如果Windows实际上可以运行它们。64位版本的Windows根本不支持DOS应用程序,从Windows Vista开始,即使在32位版本的Windows中,许多DOS应用程序也无法完全工作。
还要记住,如果DOS应用程序在Windows窗口中运行,只有该窗口将被清除,而不是整个屏幕。
我已经将这个工作做好了(使用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
mov ah, 0x06
mov al, 0
int 10h
不,你不能在Windows上这样做。这段代码只能用于bootloader和汇编内核(仅限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。
针对 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
是指向控制台屏幕缓冲区的句柄(通过GetStdHandle(STD_OUTPUT_HANDLE)
、CreateConsoleScreenBuffer(...)
或其他方式获取)。
该函数的作用是首先检索当前控制台屏幕缓冲区信息(包含其当前大小),然后使用默认文本属性和空格填充完整的屏幕缓冲区,最后将光标放置在 (0,0)。