【问题标题】:Python console Fullscreen? Maybe using os.system?Python控制台全屏?也许使用 os.system?
【发布时间】:2017-05-14 00:08:40
【问题描述】:

我正试图弄清楚如何让我的程序在全屏控制台窗口中打开。

您可以在命令提示符中键入任何命令来切换全屏吗?

如果是这样,我会想象代码如下:

from os import system

system("toggle.fullscreen")

{CODE HERE}

我知道可以使用 con 模式,但实际上并不能将其切换为最大化,这对我来说会更有用,谢谢!

【问题讨论】:

  • Windows CMD 无论如何都不能全屏,AFAIK
  • 这是不正确的。我可以按 CMD 上的最大化按钮,它工作正常。当我说全屏时,我并不是说像全屏那样需要一段时间才能完成。我的意思是全屏窗口。很抱歉造成混乱。
  • cmd.exe 只是一个可以使用控制台的 shell(conhost.exe 的实例)。全屏功能在 Vista 中被删除,但在 Windows 10 中通过 Alt+Enter 和 F11 恢复。在所有版本中,您都可以最大化控制台窗口,但在 Windows 10 之前或使用 Windows 10 中的旧控制台时,如果您想占据整个屏幕,则必须先调整屏幕缓冲区的大小。
  • 我知道你可以使用alt+enter,但是我希望程序自动完成,有什么办法吗?

标签: python windows windows-console


【解决方案1】:

您可以使用keyboard.press。如果未安装,请使用pip3 install keyboard 安装。

代码:

import keyboard
keyboard.press('f11')

【讨论】:

  • 聪明又老套,但在我看来并不是最佳的。
【解决方案2】:

我在另一篇文章中发现了这一点,它非常适合控制台窗口最大化:

import win32gui, win32con

hwnd = win32gui.GetForegroundWindow()
win32gui.ShowWindow(hwnd, win32con.SW_MAXIMIZE)

【讨论】:

    【解决方案3】:

    这是一个最大化当前控制台窗口的函数。它使用 ctypes 来调用 WinAPI 函数。首先,它调用GetLargestConsoleWindowSize 来计算它可以使窗口有多大,并可以选择指定超出此范围的lines 的数量以获得回滚缓冲区。要完成调整屏幕缓冲区大小的工作,它只需通过subprocess.check_call 调用mode.com。最后通过GetConsoleWindow获取控制台窗口句柄,调用ShowWindow最大化。

    import os
    import ctypes
    import msvcrt
    import subprocess
    
    from ctypes import wintypes
    
    kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
    user32 = ctypes.WinDLL('user32', use_last_error=True)
    
    SW_MAXIMIZE = 3
    
    kernel32.GetConsoleWindow.restype = wintypes.HWND
    kernel32.GetLargestConsoleWindowSize.restype = wintypes._COORD
    kernel32.GetLargestConsoleWindowSize.argtypes = (wintypes.HANDLE,)
    user32.ShowWindow.argtypes = (wintypes.HWND, ctypes.c_int)
    
    def maximize_console(lines=None):
        fd = os.open('CONOUT$', os.O_RDWR)
        try:
            hCon = msvcrt.get_osfhandle(fd)
            max_size = kernel32.GetLargestConsoleWindowSize(hCon)
            if max_size.X == 0 and max_size.Y == 0:
                raise ctypes.WinError(ctypes.get_last_error())
        finally:
            os.close(fd)
        cols = max_size.X
        hWnd = kernel32.GetConsoleWindow()
        if cols and hWnd:
            if lines is None:
                lines = max_size.Y
            else:
                lines = max(min(lines, 9999), max_size.Y)
            subprocess.check_call('mode.com con cols={} lines={}'.format(
                                    cols, lines))
            user32.ShowWindow(hWnd, SW_MAXIMIZE)
    

    【讨论】:

    • 绝对完美!谢谢!! :)
    猜你喜欢
    • 2013-06-12
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2011-10-10
    • 2011-10-23
    相关资源
    最近更新 更多