gpt4 book ai didi

objective-c - CGDisplayIOServicePort 在 OS X >= 10.9 中被弃用,如何替换?

转载 作者:太空狗 更新时间:2023-10-30 03:20:45 25 4
gpt4 key购买 nike

我开发了一个小应用程序,可以在多台显示器上快速更改屏幕分辨率。我想将产品名称显示为显示器的标题,使用此代码很容易找到:

NSDictionary *deviceInfo = (__bridge NSDictionary *)IODisplayCreateInfoDictionary(CGDisplayIOServicePort(dispID), kIODisplayOnlyPreferredName);

NSDictionary *localizedNames = [deviceInfo objectForKey:[NSString stringWithUTF8String:kDisplayProductName]];

if([localizedNames count] > 0) {
_title = [localizedNames objectForKey:[[localizedNames allKeys] objectAtIndex:0]];
} else {
_title = @"Unknown display";
}

但是 CGDisplayIOServicePort 在 OS X >= 10.9 中被弃用,Apple 的文档说没有替代品。不使用该方法如何查找服务端口或产品名称?

我尝试遍历 IO-registry 并尝试使用 IOServiceGetMatchingServices 方法来查找显示服务,但我对 IO-registry 不是很熟悉,所以找不到解决方案。

感谢您的帮助!

最佳答案

@Eun 的帖子似乎遗漏了一条结束讨论的信息。通过一点搜索,我发现 IOServicePortFromCGDisplayID 不是 Apple 提供的 API。相反,它是在这里找到的一段开源代码: https://github.com/glfw/glfw/blob/e0a6772e5e4c672179fc69a90bcda3369792ed1f/src/cocoa_monitor.m

我从中复制了 IOServicePortFromCGDisplayID 和 'getDisplayName'。我需要进行两项调整才能使其在 OS X 10.10 上运行。

  1. 删除处理 IOServicePortFromCGDisplayID 中序列号的代码。 (CFDictionaryGetValue 为kDisplaySerialNumber 为我返回 NULL。)
  2. 删除特定项目getDisplayName 中的错误处理代码。

如果您需要更多信息

  • 问题的问题跟踪器:github.com/glfw/glfw/issues/165
  • promise 对于解决方案:github.com/glfw/glfw/commit/e0a6772e5e4c672179fc69a90bcda3369792ed1f

我要感谢在那里提交代码的 Matthew Henry。

关于objective-c - CGDisplayIOServicePort 在 OS X >= 10.9 中被弃用,如何替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20025868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com