windll et la console ******************** exemple pour redimensionner une console windows .. code-block:: python def console_resize(width=80, height=24, buffer_height=600): '''Sets up the console size and buffer height. param width {int} Width of console in column value. param height {int} Height of console in row value. param buffer_height {int} Buffer console height in row value. ''' from ctypes import windll, byref, create_string_buffer from ctypes.wintypes import SMALL_RECT, _COORD # Active console screen buffer # STD_OUTPUT_HANDLE -> -11, STD_ERROR_HANDLE -> -12) STDERR = -12 # SMALL_RECT input LEFT = 0 TOP = 0 RIGHT = width - 1 BOTTOM = height - 1 # handle hdl = windll.kernel32.GetStdHandle(STDERR) csbi = create_string_buffer(22) res = windll.kernel32.GetConsoleScreenBufferInfo(hdl, csbi) if res: import struct (bufx, bufy, curx, cury, wattr, left, top, right, bottom, maxx, maxy) = struct.unpack("hhhhHhhhhhh", csbi.raw) current_width = right - left + 1 current_height = bottom - top + 1 current_buffer_height = bufy if buffer_height < height: buffer_height = height # order of resizing avoiding some problems if current_buffer_height > buffer_height: rect = SMALL_RECT(LEFT, TOP, RIGHT, BOTTOM) # (left, top, right, bottom) windll.kernel32.SetConsoleWindowInfo(hdl, True, byref(rect)) bufsize = _COORD(width, buffer_height) # columns, rows windll.kernel32.SetConsoleScreenBufferSize(hdl, bufsize) else: bufsize = _COORD(width, buffer_height) # columns, rows windll.kernel32.SetConsoleScreenBufferSize(hdl, bufsize) rect = SMALL_RECT(LEFT, TOP, RIGHT, BOTTOM) # (left, top, right, bottom) windll.kernel32.SetConsoleWindowInfo(hdl, True, byref(rect)) console_resize() Pour connaitre la taille d'un terminal .. code-block:: python Pour déplacer une fenêtre .. code-block:: python import sys from ctypes import windll, byref, create_string_buffer, c_wchar_p, c_long, Structure, byref from ctypes.wintypes import SMALL_RECT, _COORD from optparse import OptionParser # winuser.h line 3232 SWP_NOSIZE = 1 SWP_NOMOVE = 2 SWP_NOZORDER = 4 SWP_NOREDRAW = 8 SWP_NOACTIVATE = 16 SWP_FRAMECHANGED = 32 SWP_SHOWWINDOW = 64 SWP_HIDEWINDOW = 128 SWP_NOCOPYBITS = 256 SWP_NOOWNERZORDER = 512 SWP_NOSENDCHANGING = 1024 SWP_DRAWFRAME = SWP_FRAMECHANGED SWP_NOREPOSITION = SWP_NOOWNERZORDER SWP_DEFERERASE = 8192 SWP_ASYNCWINDOWPOS = 16384 class RECT(Structure): _fields_ = [ ('left', c_long), ('top', c_long), ('right', c_long), ('bottom', c_long) ] def top_most(title, e, x=0, y=0, cx=0, cy=0): h = windll.user32.FindWindowA(None, title) if h==0: return None if(e == True): windll.user32.SetWindowPos(h, -1,x,y,cx,cy,SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW) else: windll.user32.SetWindowPos(h, -2,x,y,cx,cy,SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW) top_most("NameOfWindows", False, x=0) connaitre la taille et la position d'une fenêtre .. code-block:: python from ctypes import windll, byref, create_string_buffer, c_wchar_p, c_long, Structure, byref from ctypes.wintypes import SMALL_RECT, _COORD from optparse import OptionParser class RECT(Structure): _fields_ = [ ('left', c_long), ('top', c_long), ('right', c_long), ('bottom', c_long) ] def get_pos(title): h = windll.user32.FindWindowA(None, title) if h==0: return None former = RECT(0,0,0,0) windll.user32.GetWindowRect(h, byref(former)) return former def get_size_screen(): return windll.user32.GetSystemMetrics(0), windll.user32.GetSystemMetrics(1) screen_width, screen_height = get_size_screen() print get_pos("NameOfWindows").left Pour faire disparaitre le cursor .. code-block:: python import sys import os if os.name == 'nt': import msvcrt import ctypes class _CursorInfo(ctypes.Structure): _fields_ = [("size", ctypes.c_int), ("visible", ctypes.c_byte)] def hide_cursor(): if os.name == 'nt': ci = _CursorInfo() handle = ctypes.windll.kernel32.GetStdHandle(-11) ctypes.windll.kernel32.GetConsoleCursorInfo(handle, ctypes.byref(ci)) ci.visible = False ctypes.windll.kernel32.SetConsoleCursorInfo(handle, ctypes.byref(ci)) elif os.name == 'posix': sys.stdout.write("\033[?25l") sys.stdout.flush() def show_cursor(): if os.name == 'nt': ci = _CursorInfo() handle = ctypes.windll.kernel32.GetStdHandle(-11) ctypes.windll.kernel32.GetConsoleCursorInfo(handle, ctypes.byref(ci)) ci.visible = True ctypes.windll.kernel32.SetConsoleCursorInfo(handle, ctypes.byref(ci)) elif os.name == 'posix': sys.stdout.write("\033[?25h") sys.stdout.flush()