Mehrere Monitore

  • Mehrere Monitore

    Ich habe an meinem Mac Pro 2 Monitore angeschlossen, wie kann ich diese unter XCode ansprechen.
    Kann man auch die Liste der Auflösungen der Monitore anzeigen lassen.
    Mac Pro Intel Xeon 2x2.8GHz , 8GB Ram , 2.000 GB HD , MacOS X 10.9
    PowerBook TI 867MHz , 1GB Ram , 40 GB HD , MacOS X 10.4
  • Mit NSScreen bekommst du nur sehr wenige Informationen über die verfügbaren Screens.
    Wenn du mehr als: aktuelle Auflösung, Farbraum und DisplayID brauchst, musst du zu IOGraphicsLib greifen. (IOKit.framework).
    IOGraphicsLib-Doku (apple.com)

    Um mit IOGraphicsLib die lokalisierten Namen der Screens zu erhalten, benötigt man die ID des jeweiligen Displays:

    Quellcode

    1. for (NSScreen* screen in [NSScreen screens])
    2. {
    3. NSDictionary* screenDictionary = [screen deviceDescription];
    4. NSNumber* screenID = [screenDictionary objectForKey:@"NSScreenNumber"];
    5. }


    Mit der ID erhält man einen CGDisplayIOServicePort für das entsprechende Display.
    Für dieses Display kann man dann ein InfoDictionary abfragen:

    Quellcode

    1. CFStringRef localName = NULL;
    2. io_connect_t displayPort = CGDisplayIOServicePort(screenID);
    3. CFDictionaryRef dict = (CFDictionaryRef)IODisplayCreateInfoDictionary(displayPort, 0);
    4. CFDictionaryRef names = CFDictionaryGetValue(dict, CFSTR(kDisplayProductName));
    5. CFArrayRef langKeys = CFArrayCreateMutable( kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks );
    6. CFDictionaryApplyFunction(names, KeyArrayCallback, (void*)langKeys);
    7. CFArrayRef orderLangKeys = CFBundleCopyPreferredLocalizationsFromArray(langKeys);
    8. CFRelease(langKeys);
    9. if(orderLangKeys && CFArrayGetCount(orderLangKeys))
    10. {
    11. CFStringRef langKey = CFArrayGetValueAtIndex( orderLangKeys, 0 );
    12. localName = CFDictionaryGetValue( names, langKey );
    13. CFRetain(localName);
    14. }
    15. CFRelease(orderLangKeys);
    16. CFRelease(dict);
    Alles anzeigen