macOS 10.15+提供了NSScreen.localizedName
,它为屏幕提供了面向用户的名称,例如"内置视网膜显示器"或"Всроеныйдисплей视网膜"(如果当地语言是俄语(。
然而,我需要支持10.15以上的macOS,并且不清楚后备方案应该是什么。
我看到了这个问题,"如何在Mac OS X中获得具有显示ID的显示名称?"。但是,所有答案都使用CGDisplayIOServicePort
,这在macOS>10.9中不可用。
我还看到了这个问题,"CGDisplayIOServicePort在OSX>=10.9中被弃用,如何替换?"。然而,所有的答案都取决于GLFW,这是一个巨大的库,我显然不想仅仅为了获得显示名称而包含它。
(编辑(我也找到了这个填充程序,"从NSScreen获取显示名称",但它不能正常工作——例如,我的"内置视网膜显示器"有一个奇怪的名称"彩色LCD",它没有为我的Sidecar iPad屏幕找到io_service_t
。
屏幕的实际名称是"彩色LCD",但用户友好的本地化名称(以及旧操作系统版本中显示的System Prefs(有一个额外的检查,以检测它是否是笔记本电脑的内部显示器。