Search code examples
objective-cmacoscocoaquartz-graphicscore-foundation

Get name of (external) display


I'm trying to get the name of the connected external display with Cocoa or CoreFoundation. With "name" I mean that string that appears in the title bar of the System Preferences window when editing Display preferences.

I couldn't find any API for that in NSScreen or in the Quartz Display Services.

But there has to be a way, because if I access the color space of the display like this:

CGColorSpaceRef colorSpace = CGDisplayCopyColorSpace(displayID);

and I log the color space's description I get:

<CGColorSpace 0x100113c20>
(kCGColorSpaceICCBased; kCGColorSpaceModelRGB; DELL 2408WFP)

enter image description here


Solution

  • I found a solution in an other thread (I wonder why I didn't find that before...).

    I updated it to be ARC compatible:

    - (NSString *)screenNameForDisplay:(CGDirectDisplayID)displayID {
        NSString *screenName = @"";
        NSDictionary *deviceInfo = (__bridge NSDictionary *)IODisplayCreateInfoDictionary(CGDisplayIOServicePort(displayID), kIODisplayOnlyPreferredName);
        NSDictionary *localizedNames = [deviceInfo objectForKey:[NSString stringWithUTF8String:kDisplayProductName]];
        if ([localizedNames count] > 0) {
            screenName = [localizedNames objectForKey:[[localizedNames allKeys] objectAtIndex:0]];
        }
        return screenName;
    }