我试图(以编程方式)检测在更改系统安全设置时出现的OSX管理员密码提示。理想情况下,该解决方案适用于C++或Objective-C。我查看了提供操作系统通知的各种NSDistributedNotificationCenters,但它们似乎都不特定于密码提示。我尝试注册该操作系统可以提供的所有通知,但是一旦进入“系统偏好设置”窗口,这些通知似乎就会停止。

我也研究了SFAuthorizationPlugin概念,但似乎更多是从冷启动登录系统。

我知道这是有可能的,因为我已经看到其他应用程序会检测到密码提示,并在出现时在屏幕上显示某些内容。

那么如何以编程方式检测OSX管理员密码提示?

最佳答案

您可以从工作空间中监听SecurityAgent通知。

订阅应用程序激活通知,如下所示:

@interface notificationHandler: NSObject {}
@end

@implementation notificationHandler
-(id)init
{
    [[[NSWorkspace sharedWorkspace] notificationCenter]
        addObserver:self
        selector   :@selector(handleNotification)
        name       :NSWorkspaceDidActivateApplicationNotification
        object     :nil];
} // init

-(void)handleNotification:(NSNotification *) notification
{
    NSDictionary info = [notification userInfo];
    NSString *appName = [[info objectForKey:NSWorkspaceApplicationKey] localizedName];
    if ([appName isEqualToString:@"SecurityAgent"]) {
        // You have found the administrator password prompt!
    }
} // handleNotification
@end

关于objective-c - 如何检测OSX管理员密码提示?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38352149/

10-09 16:16