如何在不窃取 macOS 焦点的情况下显示 window?
How to show a window without stealing focus on macOS?
我就纳闷聚光灯怎么会跟着焦点飘,另一个window还有焦点!
我可以用 window?.level = Int(CGWindowLevelForKey(.maximumWindow))
轻松地让 window 漂浮在所有其他 window 之上,但我不能让两个 windows 都具有焦点,帮助!
Cocoa中有没有类似ShowWithoutActivating
的功能?
我一直在玩这个,当最前面的 window 与最前面的应用程序不是来自同一个进程时,我似乎能够产生这种效果,这是我怀疑的聚光灯可能正在做。我可以这样实现:
在我的应用 Info.plist.
中将 LSUIElement 设置为 YES
在 Interface Builder 中,将 window 的 class 设置为 NSPanel,在 Attributes Inspector 中选中 "Non Activating",并将 "isFloatingPanel" 设置为在身份检查器下的用户定义的运行时属性中是。
有一段时间其他应用程序在前面(我只是使用了 5 秒的延迟让自己有时间将其他应用程序弹出到前面,select 一个文本字段), 在 window.
上调用 makeKeyAndOrderFront()
,然后调用 orderFrontRegardless()
当我这样做时,我得到以下信息(注意焦点环仍然绘制在 Xcode 的 "Module" 字段上):
我就纳闷聚光灯怎么会跟着焦点飘,另一个window还有焦点!
我可以用 window?.level = Int(CGWindowLevelForKey(.maximumWindow))
轻松地让 window 漂浮在所有其他 window 之上,但我不能让两个 windows 都具有焦点,帮助!
Cocoa中有没有类似ShowWithoutActivating
的功能?
我一直在玩这个,当最前面的 window 与最前面的应用程序不是来自同一个进程时,我似乎能够产生这种效果,这是我怀疑的聚光灯可能正在做。我可以这样实现:
在我的应用 Info.plist.
中将 LSUIElement 设置为 YES
在 Interface Builder 中,将 window 的 class 设置为 NSPanel,在 Attributes Inspector 中选中 "Non Activating",并将 "isFloatingPanel" 设置为在身份检查器下的用户定义的运行时属性中是。
有一段时间其他应用程序在前面(我只是使用了 5 秒的延迟让自己有时间将其他应用程序弹出到前面,select 一个文本字段), 在 window.
上调用
makeKeyAndOrderFront()
,然后调用 orderFrontRegardless()
当我这样做时,我得到以下信息(注意焦点环仍然绘制在 Xcode 的 "Module" 字段上):