我想使应用程序无法激活。
我的意思是,即使单击它,它也必须是非活动且非前景的。活动窗口必须与单击我的应用之前的应用相同。
我该怎么做?
更新:
Docky处于非活动状态,活动窗口是Safari:
NSRunningApplicationSafari.isActive == true
NSRunningApplicationDocky.isActive == false
我正在单击Docky的任何空白点。
预期结果:
Safari仍处于活动窗口。就像点击之前一样:
NSRunningApplicationSafari.isActive == true
NSRunningApplicationDocky.isActive == false
实际结果:
Docky是活动的窗口,Safari是不活动的:
NSRunningApplicationSafari.isActive == false
NSRunningApplicationDocky.isActive == true
另一个示例是Keyboard Viewer。您正在单击虚拟键盘,但活动窗口是另一个应用程序。蚂蚁正好在活动窗口中获取keyPress事件。
答案 0 :(得分:1)
实际上,您只需要.nonactivatingPanel
样式面板。其他所有内容都是详细信息,例如此窗口的级别,带有被覆盖的acceptsFirstMouse:
,needsPanelToBecomeKey
等的自定义视图等等。顺便说一句,默认情况下,该按钮接受首次单击,在这种情况下,该应用程序不激活。
例如,您的AppDelegate
可能如下所示:
class AppDelegate: NSObject, NSApplicationDelegate {
var docky: NSPanel!
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Create the window and set the content view.
docky = NSPanel(
contentRect: NSRect(x: 0, y: 0, width: 120, height: 600),
styleMask: [.nonactivatingPanel],
backing: .buffered, defer: false)
docky.level = .mainMenu
....
docky.orderFrontRegardless()
}