RosettaCodeData/Task/Terminal-control-Clear-the-.../Python/terminal-control-clear-the-...

39 lines
1.0 KiB
Python

from ctypes import *
STD_OUTPUT_HANDLE = -11
class COORD(Structure):
pass
COORD._fields_ = [("X", c_short), ("Y", c_short)]
class SMALL_RECT(Structure):
pass
SMALL_RECT._fields_ = [("Left", c_short), ("Top", c_short), ("Right", c_short), ("Bottom", c_short)]
class CONSOLE_SCREEN_BUFFER_INFO(Structure):
pass
CONSOLE_SCREEN_BUFFER_INFO._fields_ = [
("dwSize", COORD),
("dwCursorPosition", COORD),
("wAttributes", c_ushort),
("srWindow", SMALL_RECT),
("dwMaximumWindowSize", COORD)
]
def clear_console():
h = windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
csbi = CONSOLE_SCREEN_BUFFER_INFO()
windll.kernel32.GetConsoleScreenBufferInfo(h, pointer(csbi))
dwConSize = csbi.dwSize.X * csbi.dwSize.Y
scr = COORD(0, 0)
windll.kernel32.FillConsoleOutputCharacterA(h, c_char(b" "), dwConSize, scr, pointer(c_ulong()))
windll.kernel32.FillConsoleOutputAttribute(h, csbi.wAttributes, dwConSize, scr, pointer(c_ulong()))
windll.kernel32.SetConsoleCursorPosition(h, scr)
clear_console()