Изменение положения окна консоли с помощью Python (Windows)

Можно ли изменить положение консоли Windows через python? Если нет, есть ли обходной путь?

Я не знаю, нужна ли вам какая-то конкретная информация, но на всякий случай: я использую Windows 8.1 (64x), Python 3.5.0, консоль запускается через Popen, и основная цель - переместить ее в в правом верхнем углу.

Если нужна какая-либо информация, пожалуйста, дайте мне знать.


person ArsonFG    schedule 22.08.2017    source источник
comment
Шаг 1, получите дескриптор окна на консоль. Шаг 2, переместите окно. Является ли программа, которая перемещает окно, той, которая использовала Popen, или той, которая находится в консоли?   -  person Mark Ransom    schedule 23.08.2017
comment
Желательно тот, который использовал Popen (Но если вы думаете, что проще было бы сделать это изнутри, то не проблема)   -  person ArsonFG    schedule 23.08.2017
comment
Временно подключитесь к детской консоли через AttachConsole. Вызовите GetConsoleWindow, чтобы получить дескриптор окна консоли. Затем отсоединитесь через FreeConsole. Затем вызовите MoveWindow или SetWindowPos, чтобы переместить и изменить размер окна консоли.   -  person Eryk Sun    schedule 24.08.2017
comment
Не могли бы вы поместить его в ответ с примером? Пытался, но я думаю, что это слишком много для меня, чтобы понять без примера... (Извините, все еще изучаю основы python)   -  person ArsonFG    schedule 24.08.2017


Ответы (1)


Я адаптировал это из ответа NYMK

Это переместит и изменит размер одного окна командной строки (открытого с помощью CMD). Это просто и не обрабатывает ошибки, несколько окон командной строки или командную строку.

import win32gui

appname = 'Command Prompt'
xpos = 50
ypos = 100
width = 800
length = 600

def enumHandler(hwnd, lParam):
    if win32gui.IsWindowVisible(hwnd):
        if appname in win32gui.GetWindowText(hwnd):
            win32gui.MoveWindow(hwnd, xpos, ypos, width, length, True)


win32gui.EnumWindows(enumHandler, None)

для полной готовности командной строки - попробуйте:

import win32gui
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("app_name", type=str, default='Command Prompt', help="The window name")
parser.add_argument("xpos", type=int,  default=0, help="x position: 0 or greater")
parser.add_argument("ypos", type=int,  default=0, help="y position: 0 or greater")
parser.add_argument("width", type=int, default=100, help="window width: 10 or greater")
parser.add_argument("length", type=int, default=100, help="window length: 10 or greater")

args = parser.parse_args()

appname = args.app_name
xpos = args.xpos
ypos = args.ypos
width = args.width
length = args.length


def enumHandler(hwnd, lParam):
    if win32gui.IsWindowVisible(hwnd):
        if appname in win32gui.GetWindowText(hwnd):
            win32gui.MoveWindow(hwnd, xpos, ypos, width, length, True)


win32gui.EnumWindows(enumHandler, None)
person DarkLight    schedule 08.10.2018