获取已连接屏幕的名称 Swift
Get the name of a connected screen Swift
有谁知道从连接到系统的显示器获取屏幕名称或型号 name/number 的方法吗?我一直在四处寻找很长一段时间,看看是否有办法做到这一点。我见过任何人的唯一方法 post 只适用于已弃用的 API (CGDisplayIOServicePort
),(并且没有列出 API 的替代品),所以那不是'这真的是一个选择。
基本上,我想给用户一个连接屏幕的列表来显示应用程序的输出,我觉得给他们一个显示器名称列表会比任何ID 是从 NSScreen
或 CGGetActiveDisplayList
等返回的。它必须是可能的,当您转到 OS X 中的显示首选项时,它会为您提供那里的显示名称。有人有什么想法吗?
您可以直接从 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()
macOS 10.15 Catalina 引入了一个新的 属性 localizedName
用于获取外部显示名称:
NSScreen.screens.forEach {
print([=10=].localizedName)
}
有谁知道从连接到系统的显示器获取屏幕名称或型号 name/number 的方法吗?我一直在四处寻找很长一段时间,看看是否有办法做到这一点。我见过任何人的唯一方法 post 只适用于已弃用的 API (CGDisplayIOServicePort
),(并且没有列出 API 的替代品),所以那不是'这真的是一个选择。
基本上,我想给用户一个连接屏幕的列表来显示应用程序的输出,我觉得给他们一个显示器名称列表会比任何ID 是从 NSScreen
或 CGGetActiveDisplayList
等返回的。它必须是可能的,当您转到 OS X 中的显示首选项时,它会为您提供那里的显示名称。有人有什么想法吗?
您可以直接从 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()
macOS 10.15 Catalina 引入了一个新的 属性 localizedName
用于获取外部显示名称:
NSScreen.screens.forEach {
print([=10=].localizedName)
}