macos - 检测何时在 macOS 上连接了新显示器
问题描述
如何在 macOS(Swift 或 Objective-C)上检测新显示器何时连接或断开连接。
我尝试过这样的事情,但它似乎不起作用:
NSDistributedNotificationCenter *nc = [NSDistributedNotificationCenter defaultCenter];
[nc addObserverForName:NSApplicationDidChangeScreenParametersNotification
object:[NSApplication sharedApplication]
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification *notification) {
NSLog(@"Notification %@", notification);
}];
解决方案
斯威夫特 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 在那里,只要任何连接的显示器配置发生变化,例如在显示器上切换全屏模式或通过系统偏好设置,就会触发。
你可以在这里看到问题。
推荐阅读
- c# - 如何在所有模拟单个 AD 用户帐户的许多网络 PC 上创建 C# 服务
- spring-boot - Springboot 2.2.1:NoSuchMethodError:org.apache.catalina.valves.RemoteIpValve.setHostHeader
- c++ - 为什么我不能将函数分配给变量?
- python - 从 HTML 属性输入 Selenium webdriver 用户名和密码
- apache-spark - 架构定义 Spark 读取
- javascript - 是否可以清空空值数组但在 JavaScript 中保持键不变?
- sql - 如何显示sql中只有两个单词的列
- javascript - 如何在 React Native 中使用重复的常量和函数
- css - 带有 Pug 部分的 VueJS 转换
- linker - ELFIO 正在创建全零 ELF 部分,无论设置数据如何。如何将数据放入 .text 部分?