Как очистить экран, не заполняя его? - PullRequest
6 голосов
/ 23 ноября 2011

Существует ли процедура обработки прерываний, чтобы помочь мне очистить экран терминала?Будет ли это работать на Windows?

Ответы [ 4 ]

14 голосов
/ 23 ноября 2011

Настройка графического режима через 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, очищается только это окно, а не весь экран.

3 голосов
/ 17 июля 2017

Я получил это на работу (использовал 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
1 голос
/ 11 декабря 2015

В сборке попробуйте это:

mov ah, 0x06
mov al, 0
int 10h

И нет, вы не можете сделать это в Windows. Этот код может использоваться только для загрузчиков и сборочных ядер (только 16 бит, ВНИМАНИЕ: НЕ ПЫТАЙТЕСЬ НА 32 БИТАХ !!!)

Если вы хотите сделать это в Windows (консольные приложения), попробуйте следующее:

C ++

//YOU SHOULD INCLUDE STDIO.H and CONIO.H. You should also type:
//using namespace std

system("cls");

VB.NET

//You should imports System and other Default namespaces
shell("cls")

C #

System.Diagnostics.Proccess.Start("CMD.exe /c cls");

ПРИМЕЧАНИЕ. Я не думаю, что мы можем создавать консольные приложения, используя C # или VB. Конечно, я никогда не пробовал. Просто говорю. Но эти коды работают только для Windows.

0 голосов
/ 19 октября 2016

Для консольных приложений 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).

...