Objective c 在全屏应用程序前面添加NSWindow
我想在所有其他应用程序前面有一个窗口。 我希望这个窗口出现在关键字快捷方式,如“阿尔弗雷德”应用程序 我尝试了很多解决方案,但对于在主屏幕或第二屏幕上的全屏应用程序前面安装NSWindow,没有任何效果 我试过经典的:Objective c 在全屏应用程序前面添加NSWindow,objective-c,macos,Objective C,Macos,我想在所有其他应用程序前面有一个窗口。 我希望这个窗口出现在关键字快捷方式,如“阿尔弗雷德”应用程序 我尝试了很多解决方案,但对于在主屏幕或第二屏幕上的全屏应用程序前面安装NSWindow,没有任何效果 我试过经典的: [self.window setLevel:NSMainMenuWindowLevel + 1]; [self.window setCollectionBehavior:NSWindowCollectionBehaviorStationary|NSWindowCollection
[self.window setLevel:NSMainMenuWindowLevel + 1];
[self.window setCollectionBehavior:NSWindowCollectionBehaviorStationary|NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary];
[self.window setHidesOnDeactivate:NO];
它的工作,除了全屏应用程序
它与NSPanel一起使用[self.videoWindow setStyleMask:NSBorderlessWindowMask];
但只在主屏幕上
有人有办法吗?Alfred Developer around?这可能取决于所讨论的应用程序如何实现全屏,但您可能只需要使用比
NSMainMenuWindowLevel+1
更高的窗口级别,例如CGShieldingWindowLevel()+1
您可以从(必需免费开发人员帐户)下载Quartz调试
Quartz Debug可以告诉您任何窗口的级别,您所需要做的就是将窗口设置为高于您遇到问题的窗口(假设所讨论的应用程序没有做一些奇怪的事情来全屏显示)。Alfred是作为代理实现的。代理可以在全屏应用程序的空间上显示窗口。你也应该让你的应用成为一个代理。这可以通过将Application is Agent标志添加到应用程序的info.plist文件并将该值设置为YES来实现。我通过以下方式在全屏应用程序顶部显示了辅助窗口:
- self.collectionBehavior=NSWindowCollectionBehavior移动到活动空间| NSWindowCollectionBehavior FullScreen辅助李>
- 不要调用[NSApp ActivateBlala]李>
- 将应用程序设为LSUIElement,并且不要通过TransformProcessType显示Dock图标
然而,我还不知道如何正确地为带有Dock图标的应用程序显示它。从另一方面看,我不知道哪个应用程序可以在具有Dock图标的情况下执行此操作。谢谢,但它不起作用。全屏应用程序在我的窗口前面:(有什么想法吗?@boompa显然首先要尝试的是使用手动超高值,如9999。我将使用QuartzDebug更新我的答案。有什么消息吗?你是如何做到这一点的?这一点,以及将窗口的
级别设置为CGShieldingWindowLevel()
帮了我的忙。