Objective c 如何检查osx上登录窗口/屏幕的状态

Objective c 如何检查osx上登录窗口/屏幕的状态,objective-c,macos,Objective C,Macos,我已经为显示登录窗口/屏幕编写了以下代码 system("/System/Library/CoreServices/Menu\\ Extras/User.menu/Contents/Resources/CGSession -suspend"); 这很好用。是否可以检测此屏幕是否消失(即,当用户再次登录时,它将消失)?您可以像这样使用NSDistributedNotificationCenter: - (void)applicationDidFinishLaunching:(NSNotifica

我已经为显示登录窗口/屏幕编写了以下代码

system("/System/Library/CoreServices/Menu\\ Extras/User.menu/Contents/Resources/CGSession -suspend");

这很好用。是否可以检测此屏幕是否消失(即,当用户再次登录时,它将消失)?

您可以像这样使用
NSDistributedNotificationCenter

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    [[NSDistributedNotificationCenter defaultCenter] addObserverForName:@"com.apple.sessionDidMoveOffConsole" object:nil queue:nil usingBlock:^(NSNotification *note) {
        NSLog(@"user inactive");
    }];

    [[NSDistributedNotificationCenter defaultCenter] addObserverForName:@"com.apple.sessionDidMoveOnConsole" object:nil queue:nil usingBlock:^(NSNotification *note) {
        NSLog(@"user active");
    }];
}
编辑

我发现,通过订阅所有分布式通知,找到此时此刻发生的通知,并逐步将它们减少到剩下的两个


我百分之百肯定它能正常工作。我找不到关于此的任何文档,因此您可能需要测试并搜索边缘案例。

您可以使用
NSDistributedNotificationCenter
如下:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    [[NSDistributedNotificationCenter defaultCenter] addObserverForName:@"com.apple.sessionDidMoveOffConsole" object:nil queue:nil usingBlock:^(NSNotification *note) {
        NSLog(@"user inactive");
    }];

    [[NSDistributedNotificationCenter defaultCenter] addObserverForName:@"com.apple.sessionDidMoveOnConsole" object:nil queue:nil usingBlock:^(NSNotification *note) {
        NSLog(@"user active");
    }];
}
编辑

我发现,通过订阅所有分布式通知,找到此时此刻发生的通知,并逐步将它们减少到剩下的两个


我百分之百肯定它能正常工作。我找不到关于此的任何文档,因此您可能需要测试并搜索边缘案例。

您可以使用
NSDistributedNotificationCenter
如下:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    [[NSDistributedNotificationCenter defaultCenter] addObserverForName:@"com.apple.sessionDidMoveOffConsole" object:nil queue:nil usingBlock:^(NSNotification *note) {
        NSLog(@"user inactive");
    }];

    [[NSDistributedNotificationCenter defaultCenter] addObserverForName:@"com.apple.sessionDidMoveOnConsole" object:nil queue:nil usingBlock:^(NSNotification *note) {
        NSLog(@"user active");
    }];
}
编辑

我发现,通过订阅所有分布式通知,找到此时此刻发生的通知,并逐步将它们减少到剩下的两个


我百分之百肯定它能正常工作。我找不到关于此的任何文档,因此您可能需要测试并搜索边缘案例。

您可以使用
NSDistributedNotificationCenter
如下:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    [[NSDistributedNotificationCenter defaultCenter] addObserverForName:@"com.apple.sessionDidMoveOffConsole" object:nil queue:nil usingBlock:^(NSNotification *note) {
        NSLog(@"user inactive");
    }];

    [[NSDistributedNotificationCenter defaultCenter] addObserverForName:@"com.apple.sessionDidMoveOnConsole" object:nil queue:nil usingBlock:^(NSNotification *note) {
        NSLog(@"user active");
    }];
}
编辑

我发现,通过订阅所有分布式通知,找到此时此刻发生的通知,并逐步将它们减少到剩下的两个


我百分之百肯定它能正常工作。我找不到这方面的任何文档,因此您可能需要测试并搜索边缘案例。

@FaisalIkwal:欢迎!很好,我能帮忙。请阅读我的编辑;这并没有正式的文档记录,所以我们不知道边缘情况。但是谷歌除了快速的用户切换之外什么都没有,所以我敢打赌它会的work@FaisalIkwal:欢迎!很好,我能帮忙。请阅读我的编辑;这并没有正式的文档记录,所以我们不知道边缘情况。但是谷歌除了快速的用户切换之外什么都没有,所以我敢打赌它会的work@FaisalIkwal:欢迎!很好,我能帮忙。请阅读我的编辑;这并没有正式的文档记录,所以我们不知道边缘情况。但是谷歌除了快速的用户切换之外什么都没有,所以我敢打赌它会的work@FaisalIkwal:欢迎!很好,我能帮忙。请阅读我的编辑;这并没有正式的文档记录,所以我们不知道边缘情况。但是谷歌搜索除了快速用户切换之外什么都没有,所以我敢打赌它会起作用