在全屏应用程序前添加NSWindow

时间:2014-05-06 20:04:19

标签: objective-c macos

我想在所有其他应用程序前面有一个窗口。 我希望这个窗口出现在关键字快捷方式上,例如" Alfred"应用

我尝试了很多解决方案,但是在主屏幕或第二屏幕上的全屏应用程序前面使用NSWindow无效。

我尝试了经典:

[self.window setLevel:NSMainMenuWindowLevel + 1];
[self.window setCollectionBehavior:NSWindowCollectionBehaviorStationary|NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary];
[self.window setHidesOnDeactivate:NO];
除了全屏应用以外,

它的工作。

使用[self.videoWindow setStyleMask:NSBorderlessWindowMask]与NSPanel合作; 但只在主屏幕上。

有人有解决方案吗?阿尔弗雷德开发了吗?

3 个答案:

答案 0 :(得分:3)

Alfred是作为代理实现的。代理可以在全屏应用程序的空间上显示Windows。您还应该将您的应用程序设为代理。这可以通过将Application is Agent标志添加到App的info.plist文件并将值设置为YES来实现。

答案 1 :(得分:1)

我设法通过以下方式在全屏应用程序顶部显示辅助窗口:

  • self.collectionBehavior = NSWindowCollectionBehaviorMoveToActiveSpace | NSWindowCollectionBehaviorFullScreenAuxiliary;
  • 不要调用[NSApp activateblabla];
  • 制作应用程序LSUIElement,并且不要通过TransformProcessType
  • 显示Dock图标

但是,我们还不知道如何正确显示具有Dock图标的应用。从另一方面来说,我不知道哪个应用程序可以在使用Dock图标时执行此操作。

答案 2 :(得分:0)

这可能取决于相关应用程序究竟如何实现全屏,但您可能只需要使用比NSMainMenuWindowLevel + 1更高的窗口级别,例如CGShieldingWindowLevel()+1

您可以从Apples developer downloads下载Quartz Debug(必需免费开发者帐户)

Quartz Debug可以告诉你任何窗口的级别,你需要做的就是将你的窗口设置为高于你遇到问题的窗口(假设有问题的应用程序没有做一些奇怪的全屏幕)。 / p>