用于通过快速用户切换检测Mac OS X中的活动会话的API

sno*_*h09 6 c++ macos objective-c

在启用了快速用户切换的Mac OS X Snow Leopard上,是否有用于检测我的应用程序是否在活动用户会话中运行的API?即会话当前附加到屏幕和键盘.

Objective-C或C++都可以.

sno*_*h09 5

我避免使用用户切换通知,而是发现了其他两种可能性:

  1. CGMainDisplayID()从 Core Graphics使用。当您的应用程序首次启动时存储主显示 ID 并继续轮询它。当切换到另一个用户时,它将更改为不同的显示 ID。问题是它也可能因其他原因而改变,例如更改多屏设置中的主显示器。

  2. 还可以使用CGSessionCopyCurrentDictionary()Core Graphics 中的内容,并kCGSessionOnConsoleKey从字典中检索布尔值。这表明您的用户会话是否连接到控制台。

这两个都需要轮询,但这对于我的目的来说很好。如果您需要事件驱动,用户切换通知将是更好的选择。