有没有人知道从连接到系统的显示器获取屏幕名称或型号名称/号码的方法?我一直在四处寻找,看看有没有办法做到这一点。我发现任何人发布的唯一方法仅适用于已弃用的API(CGDisplayIOServicePort
),(并且该API未列出替代品),因此这不是一个真正的选项。
基本上,我想给用户一个连接屏幕的列表来显示应用程序的输出,我觉得给他们一个显示名称列表会比ID更好,更好。从NSScreen
或CGGetActiveDisplayList
等返回的内容。当您转到OS X中的显示首选项时,它可能会为您提供显示的名称。有人有什么想法吗?
答案 0 :(得分:2)
您可以直接从IOReg
获取已连接屏幕的名称func screenNames() -> [String] {
var names = [String]()
var object : io_object_t
var serialPortIterator = io_iterator_t()
let matching = IOServiceMatching("IODisplayConnect")
let kernResult = IOServiceGetMatchingServices(kIOMasterPortDefault,
matching,
&serialPortIterator)
if KERN_SUCCESS == kernResult && serialPortIterator != 0 {
repeat {
object = IOIteratorNext(serialPortIterator)
let info = IODisplayCreateInfoDictionary(object, UInt32(kIODisplayOnlyPreferredName)).takeRetainedValue() as NSDictionary as! [String:AnyObject]
if let productName = info["DisplayProductName"] as? [String:String],
let firstKey = Array(productName.keys).first {
names.append(productName[firstKey]!)
}
} while object != 0
}
IOObjectRelease(serialPortIterator)
return names
}
let names = screenNames()
答案 1 :(得分:1)
由于macOS 10.15 Catalina出现了一个新的简单属性localizedName,用于获取外部显示名称:
NSScreen.screens.forEach {
print($0.localizedName)
}