从命令行锁定屏幕与OS X上的Keychain Access一样

Nob*_*obu 8 macos cocoa

我注意到/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend和Keychain Access的锁定屏幕(打开它的首选项,检查'在菜单栏中显示钥匙串状态'然后从状态栏图标点击锁定屏幕.)具有不同的功能.有没有办法从命令行通过Terminal.app或Cocoa API运行Keychain Access的锁屏?

Mac OS 10.9.谢谢!

小智 10

我刚刚找到了解决方案:https://apple.stackexchange.com/a/123738/72534

#import <objc/runtime.h>
#import <Foundation/Foundation.h>

int main () {
    NSBundle *bundle = [NSBundle bundleWithPath:@"/Applications/Utilities/Keychain Access.app/Contents/Resources/Keychain.menu"];

    Class principalClass = [bundle principalClass];

    id instance = [[principalClass alloc] init];

    [instance performSelector:@selector(_lockScreenMenuHit:) withObject:nil];

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

另存为lockscreen.m并编译:

clang -framework Foundation -o lockscreen lockscreen.m
Run Code Online (Sandbox Code Playgroud)

完美地工作,因为它只调用与状态栏图标相同的例程.