有没有办法在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的控制台功能......?
答案 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)
由于字体设置是系统范围的,因此无法在一个会话中更改它。
您可以通过更改注册表中的某些值来更改全局字体,但您必须重新启动系统。