显示连接或断开连接时的通知

Gab*_*bor 11 cocoa objective-c

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

我目前缺少的是一种告诉用户是否将显示器连接到系统或从其系统断开屏幕的方法.

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

有关如何解决这个问题的任何建议?

Tho*_*ing 11

有几种方法可以实现这一点:
您可以在app delegate中实现applicationDidChangeScreenParameters:该方法是其中的一部分NSApplicationDelegateProtocol.
另一种方法是监听NSApplicationDidChangeScreenParametersNotification默认通知中心发送的内容[NSNotificationCenter defaultCenter].

无论何时调用委托方法或收到通知,您都可以迭代[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)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)