2016-06-22 16 views
1

システムに接続されているディスプレイから画面名やモデル名/番号を取得する方法を知っている人はいますか?私はこれを行う方法があるかどうかをかなりの時間見ていました。私が見た唯一の方法は、廃止予定のAPI(CGDisplayIOServicePort)でしか動作しません(そのAPIには置き換えられていない)ので、実際にはオプションではありません。接続された画面の名前を取得Swift

基本的に、私は、ユーザーにアプリケーションの出力を表示するための接続された画面のリストを提供したいと思います、そして、私は彼らにディスプレイの名前のリストを与えるように感じますそれは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

関連する問題