我需要在我用 C++ 编写的启动代理中连接外部显示器或从 Mac 移除外部显示器时收到通知。我为此使用
CGDisplayRegisterReconfigurationCallback
,类似于我在下面显示的内容:
#include <CoreFoundation/CoreFoundation.h>
extern "C" Boolean NSApplicationLoad(void);
void _callbackDisplayReconfig(CGDirectDisplayID display,
CGDisplayChangeSummaryFlags flags,
void *userInfo)
{
printf("DisplayReconfig received!\n");
}
int main()
{
CGError resInit =
CGDisplayRegisterReconfigurationCallback(
_callbackDisplayReconfig,
NULL);
if(resInit != kCGErrorSuccess)
{
return -1;
}
//Establish a connection to the window server
NSApplicationLoad();
CFRunLoopRun();
//Cleanup
CGDisplayRemoveReconfigurationCallback(_callbackDisplayReconfig,
NULL);
return 0;
}
上面的代码适用于我的 MacBook Air,即当我通过 HDMI 电缆插入(和拔出)外部电视时,我可以看到通知。
但是当客户在他的 MacBook Pro 上运行相同的代码时,外部显示器的通知不会出现。
我做错了什么?
附言。我们都在最新的 macOS Ventura 上进行测试。