2016-06-22 4 views
1

누구나 시스템에 연결된 디스플레이에서 화면 이름이나 모델 이름/번호를 얻는 방법을 알고 있습니까? 나는 이것을 할 길이 있는지 꽤 오랜 동안 살펴 봤다. 내가 게시 한 유일한 방법은 더 이상 사용되지 않는 API (CGDisplayIOServicePort)로 작동하며 (해당 API에 대한 대체 목록이 없음) 실제로 옵션이 아니기 때문입니다.연결된 화면의 이름 가져 오기 Swift

기본적으로 사용자에게 연결된 화면 목록을 제공하여 앱의 출력물을 표시하고 싶습니다. 디스플레이의 이름 목록에 ID가 무엇이든 훨씬 우아하고 멋지다고 느낍니다. 그것은 NSScreen 또는 CGGetActiveDisplayList 등에서 반환됩니다. 가능한 경우 OS X의 디스플레이 환경 설정으로 이동하면 디스플레이의 이름이 표시됩니다. 누구든지 아이디어가 있습니까?

답변

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() 
+0

에서 연결 화면 이름을 얻을 수 있습니다! 고마워요, 완벽하게 작동합니다. 나는이 일을 할 무언가를 위해 날을 찾았는데, 아마도 나는 옳은 일을 찾고 있지 않았을 것입니다. – bshock84

+0

반갑습니다. 아마 당신은'Quartz Display Services' 만보고 있었지만 어쨌든 디스플레이의 제품명을 얻으려고 API가 없다. – vadian

+0

그것이 내가보고있는 곳이고 NSScreen 클래스이다. 나는 당신의 코드에서 모든 API에 대해 많은 독서를 시도하여 조금 더 잘 이해할 수 있도록 노력할 것이다. – bshock84