Принятый ответ по предоставленной вами ссылке действительно представляет ответ, который вам нужен, хотя он использует недокументированный флажок параметров, что вызывает сожаление. Вы должны передать словарь опций своему звонку на CGDisplayCopyAllDisplayModes
, так как он указывает:
CGDirectDisplayID mainDisplayID = CGMainDisplayID();
CFStringRef keys[1] = { kCGDisplayShowDuplicateLowResolutionModes };
CFBooleanRef values[1] = { kCFBooleanTrue };
CFDictionaryRef options = CFDictionaryCreate(kCFAllocatorDefault, (const void**) keys, (const void**) values, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks );
CFArrayRef modesArray = CGDisplayCopyAllDisplayModes( mainDisplayID, options );
, а затем просмотреть возвращенные режимы отображения, кажется, работает для меня. Обратите внимание, что вы, вероятно, захотите проверить логическое значение, возвращаемое CGDisplayModeIsUsableForDesktopGUI(…)
, чтобы отфильтровать недействительные (в зависимости от вашего варианта использования).
Очевидно, что вы будете передавать каждый из различных идентификаторов дисплея по очереди и получите вывод, похожий на этот:
Display 3: external, main
points: (2560 x 1440), pixels: (2560, 1440)
points: (1280 x 720), pixels: (1280, 720)
points: (800 x 600), pixels: (800, 600)
points: (1024 x 768), pixels: (1024, 768)
points: (1280 x 960), pixels: (1280, 960)
points: (1344 x 1008), pixels: (1344, 1008)
points: (1344 x 756), pixels: (1344, 756)
points: (1600 x 1200), pixels: (1600, 1200)
points: (1600 x 900), pixels: (1600, 900)
points: (2048 x 1152), pixels: (2048, 1152)
Display 2: builtin,
points: (2880 x 1800), pixels: (2880, 1800)
points: (1440 x 900), pixels: (1440, 900)
points: (3360 x 2100), pixels: (3360, 2100)
points: (2560 x 1600), pixels: (2560, 1600)
points: (2048 x 1280), pixels: (2048, 1280)
points: (1650 x 1050), pixels: (1650, 1050)
points: (1280 x 800), pixels: (1280, 800)
points: (1152 x 720), pixels: (1152, 720)
points: (1024 x 768), pixels: (1024, 768)
points: (800 x 600), pixels: (800, 600)
Display 5: external,
points: (1920 x 1200), pixels: (1920, 1200)
points: (960 x 600), pixels: (960, 600)
points: (800 x 600), pixels: (800, 600)
points: (1024 x 768), pixels: (1024, 768)
points: (1024 x 640), pixels: (1024, 640)
points: (1280 x 960), pixels: (1280, 960)
points: (1280 x 800), pixels: (1280, 800)
points: (1344 x 1008), pixels: (1344, 1008)
points: (1344 x 840), pixels: (1344, 840)
points: (1600 x 1200), pixels: (1600, 1200)
points: (1600 x 1000), pixels: (1600, 1000)
Также обратите внимание, что эти цифры не совпадают с тем, что показывают, например, для MBP. «выглядит как 1920 x 1200», что не соответствует ни одному из перечисленных разрешений.
У другого разработчика возникли проблемы с выполнением этого, поэтому я собрал свой тестовый проект для быстрого взлома, который работает до github, чтобы другие могли видеть весь рабочий проект . Надеюсь, это кому-нибудь поможет ( DO очистите этот код, прежде чем использовать его в любом виде продукта - это всего лишь самый быстрый из возможных взломанных тестовых кодов).