2013-05-16 00:14:38 +00:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
#-*- coding: utf-8 -*-
|
2013-05-06 02:16:30 +00:00
|
|
|
# psr/w32color.py
|
|
|
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
|
|
|
#
|
|
|
|
# software : Kirmah <http://kirmah.sourceforge.net/>
|
2013-05-15 18:51:08 +00:00
|
|
|
# version : 2.18
|
2013-05-06 02:16:30 +00:00
|
|
|
# date : 2013
|
|
|
|
# licence : GPLv3.0 <http://www.gnu.org/licenses/>
|
|
|
|
# author : a-Sansara <[a-sansara]at[clochardprod]dot[net]>
|
|
|
|
# copyright : pluie.org <http://www.pluie.org/>
|
|
|
|
#
|
|
|
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
|
|
|
#
|
|
|
|
# This file is part of Kirmah.
|
|
|
|
#
|
|
|
|
# Kirmah is free software (free as in speech) : you can redistribute it
|
|
|
|
# and/or modify it under the terms of the GNU General Public License as
|
|
|
|
# published by the Free Software Foundation, either version 3 of the License,
|
|
|
|
# or (at your option) any later version.
|
|
|
|
#
|
|
|
|
# Kirmah is distributed in the hope that it will be useful, but WITHOUT
|
|
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
|
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
|
|
# more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
|
|
# along with Kirmah. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
#
|
|
|
|
|
|
|
|
"""
|
|
|
|
Colors text in console mode application (win32).
|
|
|
|
Uses ctypes and Win32 methods SetConsoleTextAttribute and
|
|
|
|
GetConsoleScreenBufferInfo.
|
|
|
|
"""
|
|
|
|
|
|
|
|
from ctypes import windll, Structure as Struct, c_short as SHORT, c_ushort as WORD, byref
|
|
|
|
|
|
|
|
class Coord(Struct):
|
|
|
|
"""struct in wincon.h."""
|
|
|
|
_fields_ = [("X", SHORT),("Y", SHORT)]
|
|
|
|
|
|
|
|
class SmallRect(Struct):
|
|
|
|
"""struct in wincon.h."""
|
|
|
|
_fields_ = [("Left", SHORT),("Top", SHORT),("Right", SHORT),("Bottom", SHORT)]
|
|
|
|
|
|
|
|
class ConsoleScreenBufferInfo(Struct):
|
|
|
|
"""struct in wincon.h."""
|
|
|
|
_fields_ = [("dwSize", Coord),("dwCursorPosition", Coord),("wAttributes", WORD),("srWindow", SmallRect),("dwMaximumWindowSize", Coord)]
|
|
|
|
|
|
|
|
# winbase.h
|
|
|
|
STD_INPUT_HANDLE = -10
|
|
|
|
STD_OUTPUT_HANDLE = -11
|
|
|
|
STD_ERROR_HANDLE = -12
|
|
|
|
|
|
|
|
stdout_handle = windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
|
|
|
|
SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute
|
|
|
|
GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo
|
|
|
|
|
|
|
|
def get_text_attr():
|
|
|
|
"""Returns the character attributes (colors) of the console screen
|
|
|
|
buffer."""
|
|
|
|
csbi = ConsoleScreenBufferInfo()
|
|
|
|
GetConsoleScreenBufferInfo(stdout_handle, byref(csbi))
|
|
|
|
return csbi.wAttributes
|
|
|
|
|
|
|
|
def set_text_attr(color):
|
|
|
|
"""Sets the character attributes (colors) of the console screen
|
|
|
|
buffer. Color is a combination of foreground and background color,
|
|
|
|
foreground and background intensity."""
|
|
|
|
SetConsoleTextAttribute(stdout_handle, color)
|