首页 > 解决方案 > 检测何时在 macOS 上连接了新显示器

问题描述

如何在 macOS(Swift 或 Objective-C)上检测新显示器何时连接或断开连接。

我尝试过这样的事情,但它似乎不起作用:

NSDistributedNotificationCenter *nc = [NSDistributedNotificationCenter defaultCenter];
[nc addObserverForName:NSApplicationDidChangeScreenParametersNotification
                   object:[NSApplication sharedApplication]
                    queue:[NSOperationQueue mainQueue]
               usingBlock:^(NSNotification *notification) {
                  NSLog(@"Notification %@", notification);
               }];

标签: macoscocoa

解决方案


斯威夫特 5.5.1

您可以使用通知NSApplication.didChangeScreenParametersNotification

import Cocoa

class ViewController: NSViewController {

    var externalDisplayCount:Int = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        externalDisplayCount = NSScreen.screens.count
        setupNotificationCenter()
    }

    func setupNotificationCenter() {
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(handleDisplayConnection),
            name: NSApplication.didChangeScreenParametersNotification,
            object: nil)
    }

    @objc func handleDisplayConnection(notification: Notification) {
        if externalDisplayCount < NSScreen.screens.count {
            print("An external display was connected.")
            externalDisplayCount = NSScreen.screens.count
        } else if externalDisplayCount > NSScreen.screens.count {
            print("An external display was disconnected.")
            externalDisplayCount = NSScreen.screens.count
        } else {
            print("A display configuration change occurred.")
        }
    }
}

请注意,最后的 else 在那里,只要任何连接的显示器配置发生变化,例如在显示器上切换全屏模式或通过系统偏好设置,就会触发。

你可以在这里看到问题。


推荐阅读