Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Windows中更改控制台字体_Python_Windows - Fatal编程技术网

Python 在Windows中更改控制台字体

Python 在Windows中更改控制台字体,python,windows,Python,Windows,有没有办法在python 2.6中更改Windows中的控制台字体 我在Windows7上 即: *编辑无意中给出了答案 更多信息和问题: 我查看了windows API: 它看起来有一个更改控制台字体的功能: SetCurrentConsoleFontEx SetCurrentConsoleFontEx 或者至少获取有关当前字体的信息: GetCurrentConsoleFont GetCurrentConsoleFontEx GetCurrentConsoleFont GetCurr

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

我在Windows7上

即:

*编辑无意中给出了答案

更多信息和问题:


我查看了windows API:

它看起来有一个更改控制台字体的功能:

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

GetCurrentConsoleFont
GetCurrentConsoleFontEx
GetCurrentConsoleFont
GetCurrentConsoleFontEx
我的下一步是找到一个可以使用WindowsAPI的python模块。 下面是一个名为pywin32的:

您导入的实际模块不是pywin32,而是win32api、win32net、win32console 我完全凭猜测猜出来的。文件在哪里? 运行帮助“win32console”

这里没有显示提到的字体函数,只是缺少了它们。
我是不是遗漏了什么?文件在哪里?或者,具有所有API控制台功能的模块在哪里…?

您可能需要检查,但可能不需要。在Windows控制台中,字体是cmd.exe程序的属性,由cmd.exe程序管理


与所有内容一样,如果对cmd.exe的工作方式进行反向工程,它可能存储有关字体的信息,如何强制它重新加载等。您可能可以用任何语言对其进行破解,但系统没有以支持和记录的方式提供有关如何进行破解的功能。

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


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

我查看了windows API:

它看起来有一个更改控制台字体的功能:

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

GetCurrentConsoleFont
GetCurrentConsoleFontEx
GetCurrentConsoleFont
GetCurrentConsoleFontEx
我的下一步是找到一个可以使用WindowsAPI的python模块。 下面是一个名为pywin32的:

您导入的实际模块不是pywin32,而是win32api、win32net、win32console 我完全凭猜测猜出来的。文件在哪里? 运行帮助“win32console”

这里没有显示提到的字体函数,只是缺少了它们。
我是不是遗漏了什么?文件在哪里?或者,一个具有所有API控制台功能的模块在哪里…?

好吧,我还没有深入到能够按名称选择字体的程度,我怀疑这是可能的,但是如果安装了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上。。。但是,它肯定与当前的控制台字体有关,所以我认为您应该朝这个方向搜索


还有一个类似的问题:

可以使用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))

我还写了一个不那么简单的例子。

如果有人读到这篇文章时发现,将PowerShell提示的默认字体设置到Lucida Console无法工作,那么可能有几个原因,其中许多原因只与该特定字体相关。我在这里写过关于它的博客:

简言之,对我来说,有必要将系统语言环境从瑞典语更改为英语-美国,但也有其他几种可能的解决方案

希望这有帮助


Emil

你错了-有PyConsoleScreenBuffer.GetCurrentConsoleFont方法,还有SetConsoleFont方法,尽管我还没有检查它是如何工作的。是您可以使用的文档。ActiveState在windows扩展上维护了非常好的文档,虽然有些不完整,但总比什么都没有好。可以在这里找到:SetConsoleFont似乎正在更改字体大小,而不是字体,我只能在cmd.exe中运行你的代码,我尝试创建一个script.py,它会出错注意:我想你也应该在你的主页上包含或链接这个最简版本。这很有效,但我不知道如何或为什么。你能解释一下吗?O可能只是一个最终的极简版本,只修改字体大小?在64位上,这将产生未定义的行为。检查。@Marfisa你能修改这个被剪掉的部分以适用于64位窗口吗?@jay:我在其他答案中解释过。它是argtypes和restype。它被记录为: