Use SCDynamicStoreCopyConsoleUserto get the console username.
CFStringRef consoleUserName = nil;
uid_t uid;
gid_t gid;
consoleUserName = SCDynamicStoreCopyConsoleUser(NULL, &uid, &gid);
consoleUserName -.
, , SCDynamicStoreCreate
SCDynamicStoreRef store;
CFStringRef key;
CFArrayRef keys;
CFRunLoopSourceRef rls;
store = SCDynamicStoreCreate(
NULL,
CFSTR("com.apple.dts.ConsoleUser"),
callBackFunction,
NULL
);
key = SCDynamicStoreKeyCreateConsoleUser(NULL);
assert(key != NULL);
keys = CFArrayCreate(NULL, (const void **) &key, 1, &kCFTypeArrayCallBacks);
success = SCDynamicStoreSetNotificationKeys(store, keys, NULL);
rls = SCDynamicStoreCreateRunLoopSource(NULL, store, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), rls, kCFRunLoopDefaultMode);
mConsoleUserName = CopyCurrentConsoleUsername(store);
CFRunLoopRun();
CFRunLoopSourceInvalidate(rls);
CFRelease(rls);
CFRelease(keys);
CFRelease(key);
CFRelease(store);
callBackFunction. , .
static void callBackFunction(
SCDynamicStoreRef store,
CFArrayRef changedKeys,
void * info
)
{
CFStringRef currentConsoleUser;
Boolean didChange;
currentConsoleUser = CopyCurrentConsoleUsername(store);
if (currentConsoleUser == NULL)
{
return;
}
didChange = ! CFEqual(storedvalue, currentConsoleUser);
if (![currentConsoleUser isEqualToString:@"loginwindow"])
{
}
}