如何在不窃取 macOS 焦点的情况下显示 window?

How to show a window without stealing focus on macOS?

我就纳闷聚光灯怎么会跟着焦点飘,另一个window还有焦点!

我可以用 window?.level = Int(CGWindowLevelForKey(.maximumWindow)) 轻松地让 window 漂浮在所有其他 window 之上,但我不能让两个 windows 都具有焦点,帮助!

Cocoa中有没有类似ShowWithoutActivating的功能?

我一直在玩这个,当最前面的 window 与最前面的应用程序不是来自同一个进程时,我似乎能够产生这种效果,这是我怀疑的聚光灯可能正在做。我可以这样实现:

  1. 在我的应用 Info.plist.

  2. 中将 LSUIElement 设置为 YES
  3. 在 Interface Builder 中,将 window 的 class 设置为 NSPanel,在 Attributes Inspector 中选中 "Non Activating",并将 "isFloatingPanel" 设置为在身份检查器下的用户定义的运行时属性中是。

  4. 有一段时间其他应用程序在前面(我只是使用了 5 秒的延迟让自己有时间将其他应用程序弹出到前面,select 一个文本字段), 在 window.

  5. 上调用 makeKeyAndOrderFront(),然后调用 orderFrontRegardless()

当我这样做时,我得到以下信息(注意焦点环仍然绘制在 Xcode 的 "Module" 字段上):