winconsole.py
46 lines
| 1.4 KiB
| text/x-python
|
PythonLexer
fperez
|
r88 | """Set of functions to work with console on Windows. | ||
fperez
|
r65 | """ | ||
fperez
|
r88 | #***************************************************************************** | ||
# Copyright (C) 2005 Alexander Belchenko <bialix@ukr.net> | ||||
# | ||||
# This file is placed in the public domain. | ||||
# | ||||
#***************************************************************************** | ||||
fperez
|
r65 | |||
__author__ = 'Alexander Belchenko (e-mail: bialix AT ukr.net)' | ||||
__license__ = 'Public domain' | ||||
import struct | ||||
try: | ||||
import ctypes | ||||
except ImportError: | ||||
ctypes = None | ||||
def get_console_size(defaultx=80, defaulty=25): | ||||
""" Return size of current console. | ||||
This function try to determine actual size of current working | ||||
console window and return tuple (sizex, sizey) if success, | ||||
or default size (defaultx, defaulty) otherwise. | ||||
Dependencies: ctypes should be installed. | ||||
""" | ||||
if ctypes is None: | ||||
# no ctypes is found | ||||
return (defaultx, defaulty) | ||||
h = ctypes.windll.kernel32.GetStdHandle(-11) | ||||
csbi = ctypes.create_string_buffer(22) | ||||
res = ctypes.windll.kernel32.GetConsoleScreenBufferInfo(h, csbi) | ||||
if res: | ||||
(bufx, bufy, curx, cury, wattr, | ||||
left, top, right, bottom, maxx, maxy) = struct.unpack("hhhhHhhhhhh", | ||||
csbi.raw) | ||||
sizex = right - left + 1 | ||||
sizey = bottom - top + 1 | ||||
return (sizex, sizey) | ||||
else: | ||||
return (defaultx, defaulty) | ||||