获取(外部)显示的名称

时间:2012-10-19 19:05:12

标签: objective-c macos cocoa quartz-graphics core-foundation

我正在尝试使用Cocoa或CoreFoundation获取连接的外部显示器的名称。 “name”是指编辑“显示首选项”时出现在“系统偏好设置”窗口标题栏中的字符串。

我在NSScreenQuartz Display Services中找不到任何API。

但必须有办法,因为如果我像这样访问显示器的颜色空间:

CGColorSpaceRef colorSpace = CGDisplayCopyColorSpace(displayID);

我记录了颜色空间的描述:

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

enter image description here

1 个答案:

答案 0 :(得分:1)

我在other thread中找到了一个解决方案(我想知道为什么我之前没有找到...)。

我将其更新为ARC兼容:

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