使用 activateWithOptions 聚焦应用程序 - 仅在非小型化时有效

Focusing App with activateWithOptions - only works if non-miniaturized

我正在尝试关注另一个进程的所有 windows,我知道它的 PID。

当我运行以下代码时:

app = [NSRuningApplication runningApplicationWithProcessIdentifier: 400];
[app activateWithOptions: (NSApplicationActivateAllWindows | NSApplicationActivateIgnoringOtherApps)]

显示所有 windows 而非 minimized/miniaturized。但是,如果显示 windows 的所有 windows minimized/miniaturized none。

如何在激活时取消最小化所有 windows?我也试过 SetFrontProcess 但那有完全相同的问题。

这是我针对该问题制作的截屏视频:https://www.youtube.com/watch?v=sR5uf4eR8js

编辑 - 古怪的解决方案

我发现了一个古怪的半解决方案,它是 运行 killall Dock,但它没有最小化 所有 最小化 windows。我只需要取消最小化特定 PID 的 windows。

首先,要明确一点,-activateWithOptions: 激活 Firefox 的另一个实例。例如,您可以通过查看其 Window 菜单来判断。唯一的问题是它没有最小化任何 windows。这不一定是不正确的行为。例如,如果您使用 Command-Tab 切换到另一个 Firefox,而不是单击其 Dock 图标,它会变为活动状态但不会取消最小化其 window.

因此,您应该考虑保持现状。

不过,如果您真的想更改它,请尝试执行以下操作而不是 -activateWithOptions::

[[NSWorkspace sharedWorkspace] launchApplicationAtURL:app.bundleURL
                                              options:NSWorkspaceLaunchAsync | NSWorkspaceLaunchWithoutAddingToRecents
                                        configuration:@{}
                                                error:NULL];

这大约相当于单击应用程序的 Dock 图标。或者从 Finder 打开应用程序。由于它已经 运行,现有实例将被激活并 sent the reopen application (kAEReopenApplication a.k.a. 'rapp') Apple event。如果 windows 的所有 windows 都被最小化,则标准行为将取消最小化 window。 (如果它没有打开 windows,它通常会创建一个新的默认 window。在文档编辑器中,这将是一个新的无标题文档。在 Firefox 中,这将是主页。 )

这不会取消最小化 all windows,但无论如何,这通常是不需要的。