在Windows中更改控制台字体

时间:2010-08-28 22:07:00

标签: python windows

有没有办法在python 2.6中更改Windows中的控制台字体?

我在Windows 7上。

即:

import os
os.console.font = 'Lucida Console'

*编辑(意外发布此答案)

更多信息和问题:

我查看了Windows API: http://msdn.microsoft.com/en-us/library/ms682073%28v=VS.85%29.aspx

它看起来像是有改变控制台字体的功能:

SetCurrentConsoleFontEx

或至少获取有关当前字体的信息:

GetCurrentConsoleFont
GetCurrentConsoleFontEx

我的下一步是找到一个可以使用windows API的python模块。 这是一个名为pywin32: http://sourceforge.net/projects/pywin32/

您导入的实际模块不是pywin32,而是win32api,win32net,win32console 我完全猜测了这一点。文档在哪里? 在帮助上运行('win32console')

没有在那里显示所提到的字体功能,它只是简单地遗漏了它们。 我在这里错过了什么吗?文档在哪里?或者哪个模块具有所有API的控制台功能......?

7 个答案:

答案 0 :(得分:9)

可以使用ctypes更改控制台字体。最小代码示例如下所示:

import ctypes

LF_FACESIZE = 32
STD_OUTPUT_HANDLE = -11

class COORD(ctypes.Structure):
    _fields_ = [("X", ctypes.c_short), ("Y", ctypes.c_short)]

class CONSOLE_FONT_INFOEX(ctypes.Structure):
    _fields_ = [("cbSize", ctypes.c_ulong),
                ("nFont", ctypes.c_ulong),
                ("dwFontSize", COORD),
                ("FontFamily", ctypes.c_uint),
                ("FontWeight", ctypes.c_uint),
                ("FaceName", ctypes.c_wchar * LF_FACESIZE)]

font = CONSOLE_FONT_INFOEX()
font.cbSize = ctypes.sizeof(CONSOLE_FONT_INFOEX)
font.nFont = 12
font.dwFontSize.X = 11
font.dwFontSize.Y = 18
font.FontFamily = 54
font.FontWeight = 400
font.FaceName = "Lucida Console"

handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
ctypes.windll.kernel32.SetCurrentConsoleFontEx(
        handle, ctypes.c_long(False), ctypes.pointer(font))

我还写了一个不那么简单的例子on my homepage

答案 1 :(得分:2)

答案 2 :(得分:2)

可能不是。在Windows控制台中,字体是cmd.exe程序的属性并由其管理。

与所有内容一样,如果你对cmd.exe的工作方式进行逆向工程,它可以存储有关字体的信息,如何强制它重新加载它等等,你可能能够进行黑客攻击(用任何语言)但系统没有以支持和记录的方式提供有关如何操作的功能。

答案 3 :(得分:1)

我查看了Windows API: http://msdn.microsoft.com/en-us/library/ms682073%28v=VS.85%29.aspx

它看起来像是有改变控制台字体的功能:

SetCurrentConsoleFontEx

或至少获取有关当前字体的信息:

GetCurrentConsoleFont
GetCurrentConsoleFontEx

我的下一步是找到一个可以使用windows API的python模块。 这是一个名为pywin32: http://sourceforge.net/projects/pywin32/

您导入的实际模块不是pywin32,而是win32api,win32net,win32console 我完全猜测了这一点。文档在哪里? 在帮助上运行('win32console')

没有在那里显示所提到的字体功能,它只是简单地遗漏了它们。 我在这里错过了什么吗?文档在哪里?或者哪个模块具有所有API的控制台功能......?

答案 4 :(得分:0)

好吧,我没有深入挖掘能够按名称选择字体(我怀疑它是否可能),但是这段代码(假设安装了pywin32)似乎用它的控制台做了一些有趣的事情(必须是cmd.exe,Console2不起作用,我不知道它是否适用于powershell):

[C:Users/cji]|1> import win32console
[C:Users/cji]|2> win32console.PyConsoleScreenBufferType( win32console.GetStdHandle( win32console.STD_OUTPUT_HANDLE )  )
         <2> <PyConsoleScreenBuffer:19>
[C:Users/cji]|3> p = _
[C:Users/cji]|6> p.SetConsoleFont( 1 )
[C:Users/cji]|7> p.SetConsoleFont( 2 )
# and so on, to:
[C:Users/cji]|12> p.SetConsoleFont( 11 ) #this is Lucida Console, if I see correctly

文档说,SetConsoleFont“没有记录在MSDN上”......但是,它当然使用当前的控制台字体 ,所以我认为你应该朝这个方向搜索。

此外,类似的问题:How can I change console font?

答案 5 :(得分:0)

如果有人读到这个问题,设置PowerShell的默认字体提示 Lucida Console 不起作用,可能有几个原因(许多原因只与该特定字体有关)。我在这里写了博客:http://www.meadow.se/wordpress/setting-the-font-of-a-powershell-console-to-lucida-console-wont-work/

简而言之,对我来说,有必要将系统区域设置从瑞典语更改为英语(美国),但还有其他一些可能的解决方案。

希望这有帮助。

埃米尔

答案 6 :(得分:-2)

由于字体设置是系统范围的,因此无法在一个会话中更改它。

您可以通过更改注册表中的某些值来更改全局字体,但您必须重新启动系统。