如何使用Cocoa API从Python脚本最小化/最大化macOS窗口?

16

我如何从Python脚本中最小化/最大化macOS中的窗口? 在Windows上,有一个win32 api(ShowWindow()函数)可以做到这一点。我想要相应于macOS的等效方法。我希望能够通过脚本从窗口标题找到窗口,然后将其最小化或最大化。

这可行吗?我猜我需要使用pyobjc模块。


试试这个,可能会有帮助 https://dev59.com/kILba4cB1Zd3GeqPi8I8 https://unix.stackexchange.com/questions/385949/python-script-to-minimize-all-but-one-window-kills-panel - Nelson Sule
1个回答

10

可能有多种方法来实现它,其中一种是枚举正在运行的应用程序,然后枚举应用程序中的窗口。

我这里将展示应用程序的方法。

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移动窗口

如何在Mac上使用Python列出所有工作区的所有窗口?

如何从Swift中的CGWindowID获取窗口引用(CGWindow、NSWindow或WindowRef)?

安装Quartz模块时出现“找不到文件:'requirements.txt'”错误

如何构建苹果的Son of grab示例?

如何在没有辅助功能API的情况下获取Mac OS中另一个应用程序窗口的标题、位置和大小?

获取Mac OS X中当前活动窗口/文档的标题

-[NSRunningApplication activateWithOptions:]无法工作

如何在Mac OS X上使用Python启动前台应用程序?

将NSWindow设置为焦点

使用窗口ID激活一个窗口


这个虽然不执行最小化动画,但真的没有其他替代方案吗? - mgracer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接