如何在 macOS 中将水印添加到屏幕 (NSScreen)

How to add watermark to Screen (NSScreen) in macOS

我正在制作一个应用程序,它将在 Mac 上的实时屏幕上添加水印。我应该选择哪个API?我尝试了 NSScreen,但我没有找到任何可以将视图添加到 NSScreen 的方法。

像MacAppstore.Please中的Sakura之类的应用程序看看,我不知道我应该使用哪个API。

最简单的解决方案是定义一个自定义的、透明的、window。

当您创建 window 时,您指定了特殊的 BorderlessWindowMask。这将创建一个 window,它是屏幕上没有标题栏、边缘等的简单矩形区域。

然后你设置一堆属性,这样

  • window 漂浮在另一个 windows
  • 之上
  • 它不响应事件
  • 没有影子
  • 它的背景是透明的

以此类推

@implementation WatermarkOverlayWindow

- (id)initWithContentRect:(NSRect)contentRect
{
    self = [super initWithContentRect:contentRect
                            styleMask:NSBorderlessWindowMask
                              backing:NSBackingStoreBuffered
                                defer:NO];
    if (self!=nil)
        {
        self.level = NSFloatingWindowLevel;
        self.ignoresMouseEvents = YES;
        self.releasedWhenClosed = NO;
        self.movableByWindowBackground = NO;
        self.alphaValue = 1.0f;
        self.backgroundColor = NSColor.clearColor;
        self.opaque = NO;
        self.hasShadow = NO;
        }
    return self;
}

...

现在您可以向此 window 添加 semi-transparent 视图,这些视图将显示为浮动在屏幕上。或者,您可以在此 window 中放置不透明视图,然后将 window 的整体 alphaValue 更改为小于 1.0.

的值