Как я могу свернуть/развернуть окна в macOS с помощью API Cocoa из скрипта Python?

Как я могу свернуть/развернуть окна в macOS из скрипта Python? В Windows есть Win32 API (функция ShowWindow()), которая может сделать это. Я хотел бы эквивалент MacOS. Мне бы хотелось, чтобы скрипт мог найти окно по его заголовку, а затем свернуть или развернуть его.

Это возможно? Я предполагаю, что мне нужно использовать модуль pyobjc для этого.

Ответ 1

Вероятно, есть разные способы сделать это, из которых перечисление запущенных приложений, а затем перечисление окон внутри приложения.

Я покажу подход приложения здесь

from AppKit import NSApplication, NSApp, NSWorkspace
from Quartz import kCGWindowListOptionOnScreenOnly, kCGNullWindowID, CGWindowListCopyWindowInfo

workspace = NSWorkspace.sharedWorkspace()
activeApps = workspace.runningApplications()
for app in activeApps:
    if app.isActive():
        options = kCGWindowListOptionOnScreenOnly
        windowList = CGWindowListCopyWindowInfo(options,
                                                kCGNullWindowID)
        for window in windowList:
            if window['kCGWindowOwnerName'] == app.localizedName():
                print(window.getKeys_)
                break
        break

Это позволит найти текущее ориентированное приложение, вы можете изменить логику на основе названий или чего угодно

После того, как app найден. Вы можете свернуть это с помощью

app.hide()

И вы можете снова показать приложение, используя

from Cocoa import NSApplicationActivateIgnoringOtherApps, NSApplicationActivateAllWindows
app.unhide()
app.activateWithOptions_(NSApplicationActivateIgnoringOtherApps)

# or 
app.activateWithOptions_(NSApplicationActivateIgnoringOtherApps | NSApplicationActivateAllWindows)

Множество тем, на которые мне пришлось обратиться, чтобы получить это решение

OS X: переместить окно из Python

Как вывести список всех окон из всех рабочих областей в Python на Mac?

Как получить ссылку на окно (CGWindow, NSWindow или WindowRef) из CGWindowID в Swift?

" Нет такого файла: & # 39; needs.txt & # 39; Ошибка & Quot; при установке кварцевого модуля

Как создать пример Apple для сына?

Как получить заголовок, положение и размер окна другого приложения в Mac OS без API доступа?

Получить заголовок текущего активного окна/документа в Mac OS X

- [NSRunningApplication activWithOptions:] не работает

Как запустить приложение на переднем плане в Mac OS X с Python?

установить NSWindow сосредоточены

Активировать окно, используя его идентификатор окна