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)
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;
}