gpt4 book ai didi

objective-c - 显示器连接或断开连接时的通知

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

我正在开发一个 OS X 应用程序,它在所有已连接显示器的所有可用空间上显示自定义窗口。我可以通过调用 [NSScreen screens] 获取可用显示对象的数组。

我目前缺少的是一种判断用户是将显示器连接到他们的系统还是从他们的系统断开屏幕的方法。

我已经在 Cocoa 文档中搜索了处理此类情况的通知,但运气不佳,而且我拒绝相信在更改连接到系统的显示器数量时不会发布某种系统通知.

关于如何解决这个问题有什么建议吗?

最佳答案

有几种方法可以实现:
你可以实现 applicationDidChangeScreenParameters:在您的应用委托(delegate)中(该方法是 NSApplicationDelegateProtocol 的一部分)。
另一种方法是监听默认通知中心[NSNotificationCenter defaultCenter]发送的NSApplicationDidChangeScreenParametersNotification

每当您的委托(delegate)方法被调用或您收到通知时,您可以遍历 [NSScreen screens] 并查看显示器是否已连接或移除(您必须维护一个可以检查的显示列表在程序启动时反对)。

非 Cocoa 方法是通过 Core Graphics Display 服务:
您必须实现一个重新配置功能并将其注册到 CGDisplayRegisterReconfigurationCallback(CGDisplayReconfigurationCallBack cb, void* obj);

在您的重新配置功能中,您可以查询受影响显示器的状态。例如:

void DisplayReconfigurationCallBack(CGDirectDisplayID display, CGDisplayChangeSummaryFlags flags, void* userInfo)
{
if(display == someDisplayYouAreInterestedIn)
{
if(flags & kCGDisplaySetModeFlag)
{
...
}
if(flags & kCGDisplayRemoveFlag)
{
...
}
if(flags & kCGDisplayDisabledFlag)
{
...
}
}
if(flags & kCGDisplaySetModeFlag || flags & kCGDisplayDisabledFlag || flags & kCGDisplayRemoveFlag)
{
...
}
}

关于objective-c - 显示器连接或断开连接时的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18042641/

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