API检测活跃的会话在Mac OS X与快速用户切换
API to detect active session in Mac OS X with fast user switch
在Mac OS X雪豹上启用了快速用户切换,是否有API来检测我的应用程序是否在活动用户会话中运行?即当前连接到屏幕和键盘的会话。
Objective-C或c++都可以
我避免使用用户切换通知,而是发现了其他两种可能性:
-
使用Core Graphics中的
CGMainDisplayID()
。在应用程序第一次启动时存储主显示ID并继续轮询它。当切换到另一个用户时,它将更改为不同的显示ID。这样做的问题是,它也可能因为其他原因而改变,例如,在多屏幕设置中改变哪个显示器是主显示器。 -
也使用Core Graphics中的
CGSessionCopyCurrentDictionary()
,并从字典中检索kCGSessionOnConsoleKey
布尔值。这表明您的用户会话是否附加到控制台。
这两种方法都需要轮询,但这对我的目的来说很好。如果你需要事件驱动,用户切换通知将是一个更好的选择。
从"多用户环境介绍"我只能想到一件事可以满足您的需求:用户切换通知。因此,如果应用程序启动,它显然必须处于活动会话中。现在您可以使用用户切换通知来设置新状态,即应用程序不再在活动会话中运行。
这对我有效(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
)
相关文章:
- C++如何通过用户输入删除列表元素
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 如何只允许用户输入正整数
- C++如何计算用户输入的数字中的偶数位数
- 通过for循环使用用户输入填充列表
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 在C++中,我如何接受不同于同一行的用户输入
- 当用户超过按钮点击限制时报告
- Visual C++(VS2017)中用户定义的转换不明确
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 当用户键入分隔符时,停止getline()输入
- C++读取用户输入而不按回车键(Mac OS X),与Turbo Pascal中的读取键相同
- API检测活跃的会话在Mac OS X与快速用户切换
- 在Mac OS X上共享一个c++库,这样我就可以在mySQL中添加用户定义的函数