OSX:在登录窗口中枚举屏幕

时间:2017-06-29 09:23:40

标签: objective-c macos

我试图在登录屏幕上使用OSX通过命令行枚举屏幕(使用ssh)。

[NSScreen screens]CGGetActiveDisplays都返回0个屏幕。还有另一种屏幕枚举方法吗?

1 个答案:

答案 0 :(得分:4)

登录前代理可以使用CGGetOnlineDisplayList枚举显示。

我使用了来自here的示例Apple代码。

将其修改为链接CoreGraphics,并将以下代码添加到applicationDidFinishLaunching方法中:

CGDirectDisplayID displays[10];
uint32_t numDisplays = 0;

CGGetOnlineDisplayList(10, displays, &numDisplays);

for(uint32_t i = 0; i < numDisplays; i++)
{
    [[LogManager sharedManager] logWithFormat:@">>> Found an online display!"];
}

if(numDisplays == 0)
    [[LogManager sharedManager] logWithFormat:@"<<<<< No displays!"];

根据示例中有关如何查看日志的文档,以下内容将打印在登录屏幕上:

Jul 12 10:03:09 veeboxs-MacBook-Pro PreLoginAgentCocoa[3129] <Info>: Did finish launching begin Jul 12 10:03:09 veeboxs-MacBook-Pro PreLoginAgentCocoa[3129] <Info>: Showing window with extreme prejudice Jul 12 10:03:09 veeboxs-MacBook-Pro PreLoginAgentCocoa[3129] <Info>: Did finish launching end Jul 12 10:03:09 veeboxs-MacBook-Pro PreLoginAgentCocoa[3129] <Info>: >>> Found an online display!