在启用了快速用户切换的Mac OS X Snow Leopard上,是否有用于检测我的应用程序是否在活动用户会话中运行的API?即当前会话连接到屏幕和键盘。
Objective-C或C ++都可以。
答案 0 :(得分:4)
我避免使用用户交换机通知,而是找到了另外两种可能性:
使用Core Graphics中的CGMainDisplayID()
。在应用首次启动时存储主显示ID并继续轮询。切换到其他用户时,它将更改为不同的显示ID。问题是它也可能因其他原因而改变,例如:更改哪个显示器是多屏设置中的主显示器。
同样使用Core Graphics中的CGSessionCopyCurrentDictionary()
,并从字典中检索kCGSessionOnConsoleKey
布尔值。这表示您的用户会话是否已附加到控制台。
这两个都需要投票,但这对我的目的来说很好。如果您需要事件驱动,用户切换通知将是更好的选择。
答案 1 :(得分:2)
从“Introduction to Multiple User Environments”我只能想到一件可以满足您需求的东西:用户切换通知。因此,如果您的应用程序启动它,则必须处于活动会话中。现在您可以使用用户切换通知来设置新状态,即。即应用程序不再在活动会话中运行。
答案 2 :(得分:0)
这对我有用(10.14 / Swift 4)
//Fast user switch out
NSWorkspace.shared.notificationCenter.addObserver(
self,
selector: #selector(becameInactive),
name: NSWorkspace.sessionDidResignActiveNotification,
object: nil
)
//Fast user switch bak in
NSWorkspace.shared.notificationCenter.addObserver(
self,
selector: #selector(becameActive),
name: NSWorkspace.sessionDidBecomeActiveNotification,
object: nil
)
// Switching workspace (spaces)
NSWorkspace.shared.notificationCenter.addObserver(
self,
selector: #selector(workspaceSwitched),
name: NSWorkspace.activeSpaceDidChangeNotification,
object: nil
)