macOS 如何监听剪贴板的变化?

18 min read

在 macOS 中,可以使用 NSPasteboard 类来监听剪贴板的变化。下面是一个简单的示例代码,用于在剪贴板内容发生变化时打印出剪贴板中的字符串:

import Cocoa

class ClipboardObserver: NSObject, NSPasteboardOwner {
    let pasteboard = NSPasteboard.general
    
    override init() {
        super.init()
        
        pasteboard.declareTypes([.string], owner: self)
        pasteboard.addTypes([.string], owner: self)
        pasteboard.owner = self
        
        NotificationCenter.default.addObserver(self, selector: #selector(onPasteboardChanged), name: NSPasteboard.didChangeNotification, object: pasteboard)
    }
    
    @objc func onPasteboardChanged() {
        if let content = pasteboard.string(forType: .string) {
            print("剪贴板内容变化:\(content)")
        }
    }
    
    // 此方法是必需的,用于满足 NSPasteboardOwner 协议
    func pasteboardChangedOwner(_ sender: NSPasteboard) {
    }
}

let observer = ClipboardObserver()
RunLoop.main.run()

在上述示例中,通过创建 ClipboardObserver 类,并在初始化方法中添加剪贴板内容类型为字符串,在剪贴板内容发生变化时,会触发 onPasteboardChanged 方法,将剪贴板中的字符串打印出来。最后使用 RunLoop.main.run() 方法来启动监听器,并保持程序保持运行状态。