gpt4 book ai didi

swift - 使用 NSScreen 确定连接到 MacBook 电脑的外接屏幕

转载 作者:可可西里 更新时间:2023-11-01 00:36:36 26 4
gpt4 key购买 nike

我需要在外部屏幕上显示一个窗口(例如连接到 Macbook 的显示器)。但我不知道如何区分内部 MacBook 屏幕和外部屏幕。调用 NSScreen.screens() 返回所有屏幕的列表,在我的例子中,索引为 0 的屏幕是我连接的外部屏幕,索引为 1 的屏幕是我的内部(内置)MacBook 屏幕。但是文档说:

The screen at index 0 in the returned array corresponds to the primary screen of the user’s system.

那么为什么我连接的屏幕被标记为主要屏幕?是否所有系统上的外部屏幕都被标记为主要 => 我可以假设在所有连接了外部屏幕的系统上这个屏幕都在 0 位置吗?

此外,OS X dock 仅在我的内部屏幕上可见,我认为默认情况下该 dock 在主屏幕上可见,但事实并非如此。

有没有办法可靠地确定正确的外接屏幕?

最佳答案

2022 年 7 月更新:更新了以下代码以删除 guard 语句,因为 NSScreen.screens 不再返回可选。

为了扩展 werediver 的回答,这里有一个实现:

extension NSScreen {
class func externalScreens() -> [NSScreen] {
let description: NSDeviceDescriptionKey = NSDeviceDescriptionKey(rawValue: "NSScreenNumber")
return screens.filter {
guard let deviceID = $0.deviceDescription[description] as? NSNumber else { return false }
print(deviceID)
return CGDisplayIsBuiltin(deviceID.uint32Value) == 0
}
}
}

用法很简单:

let externalScreens = NSScreen.externalScreens()

您可能希望根据需要调整 guard 语句的 else block 中的行为。

关于swift - 使用 NSScreen 确定连接到 MacBook 电脑的外接屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37189263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com