xcode – CGDirectDisplayID,多个GPU,不推荐使用CGDisplayIOServicePort并唯一标识显示

xcode – CGDirectDisplayID,多个GPU,不推荐使用CGDisplayIOServicePort并唯一标识显示,第1张

概述我需要唯一地识别显示器,以达到显示器确实在特征上不同的程度.因此,插入同一物理端口的相同型号的显示器不会被视为不同,但基本上其他一切都将被视为不同. 当系统GPU更改时,CGDirectDisplayID也会更改,但不会以文档的方式更改.实验表明,根据使用的GPU,相同的屏幕ID将相差2. CGDisplayID changing issues 解决此问题的方法是获取显示的IO注册表字符串: io 我需要唯一地识别显示器,以达到显示器确实在特征上不同的程度.因此,插入同一物理端口的相同型号的显示器不会被视为不同,但基本上其他一切都将被视为不同.

当系统GPU更改时,CGDirectdisplayID也会更改,但不会以文档的方式更改.实验表明,根据使用的GPU,相同的屏幕ID将相差2.

@L_419_0@

解决此问题的方法是获取显示的IO注册表字符串:

io_service_t  servicePort = CGdisplayIOServicePort (cgdisplayID);io_service_t  root = IOdisplayForFramebuffer (servicePort,kNilOptions);NSDictionary* ioRegistryDict = nil;Nsstring*     displayKey = nil;IORegistryEntryCreateCFPropertIEs (root,(cfmutabledictionaryRef *)&ioRegistryDict,kcfAllocatorDefault,kNilOptions);if (ioRegistryDict)    displayKey = [ioRegistryDict objectForKey:@"IOdisplayPrefsKey"];

这很有效,除了10.9之外,不推荐使用CGdisplayIOServicePort.

鉴于所有这些,以及Apple建议不要缓存NSScreens(无论如何都不能真正用于此目的),可靠地识别屏幕的最佳方法是什么,以便我可以告诉(例如)家中的屏幕之间的区别一个在工作?

我不想依赖屏幕分辨率,因为不应将用户更改分辨率视为不同的显示.也不应该将不同GPU上的相同屏幕视为不同.

第二个目标是找到一种给定CGDirectdisplayID的方法,如果发生GPU切换,如何确定同一屏幕的CGDirectdisplayID是什么?这至少允许我通过CGDirectdisplayID跟踪显示,只要我可以匹配来自两个GPU控制器的两个结果.

解决方法 使用CFUUIDRef,可以使用以下方法获得:

CGdisplayCreateUUIDFromdisplayID(CGDirectdisplayID displayID)
并且您可以使用以下方式获取显示ID:

CGdisplayGetdisplayIDFromUUID(CFUUIDRef uuID)

这就是我用来唯一标识显示的内容,即使它们的CGDirectdisplayID发生了变化,例如插入了不同的端口.不幸的是,Apple没有正确记录这些功能,但我在多台显示器上进行的测试表明,获得的CFUUIDRef是唯一且一致的 – 即使重启后 – 无论CGDirectdisplayID是否因任何原因而改变.

要检查显示是新的/唯一的,请使用其CGDirectdisplayID并将其转换为CFUUIDRef,然后比较UUID,它是多对一关系,许多CGDirectdisplayID将映射到单个CFUUIDRef.

这些API调用在10.7 – 10.12中的applicationservices和10.13中的colorSync中可用.

总结

以上是内存溢出为你收集整理的xcode – CGDirectDisplayID,多个GPU,不推荐使用CGDisplayIOServicePort并唯一标识显示全部内容,希望文章能够帮你解决xcode – CGDirectDisplayID,多个GPU,不推荐使用CGDisplayIOServicePort并唯一标识显示所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1100229.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存