Java应用程序是否有办法检测屏幕是否被锁定?

问题描述:

我正在寻找一种方法来了解Java应用程序(没有 JNI - 它是一个多平台应用程序)可以检测到屏幕是否被锁定。Java应用程序是否有办法检测屏幕是否被锁定?

有关信息...我们的应用程序记录了用户正在工作时的时间 - 我们希望它在屏幕锁定时自动停止记录,而不是用户必须明确这样做。

+0

只是好奇,但也许它也导致更好的答案:这是什么目的? – 2009-01-16 13:57:50

+0

应用程序记录用户正在工作时的时间 - 我们希望在屏幕自动锁定时停止记录,而不是显式地执行此操作。 – 2009-01-16 14:01:42

+0

Spark中存在类似的需求(在我的回答中提到):锁定工作站时设置存在...对于该跨平台IM客户端非常有用。 – VonC 2009-01-16 14:07:51

我不认为有一个API或甚至一个方法来做到这一切。解析由java.awt.Robot生成的屏幕截图既不是平台,也不是版本,甚至是配置无关的,一般来说,我不认为“屏幕锁定”是一个足够好的定义概念,在Linux上,可以有不止一个“屏幕”(X服务器),您可以切换到控制台终端,您可以让运行一台(或多台)机器的应用程序通过网络在另一台计算机上显示它们的GUI ...

我确认似乎没有Java API来检测屏幕锁定状态。

Spark开发者在2006年试了一下(像这样的thread shows),但没有透露具体的实现细节。
但是,它可能涉及JNI和本地调用功能,如WTSQuerySessionInformation(要检测是否断开使用WTSQuerySessionInformation(NULL, WTS_CURRENT_SESSION, WTSConnectState)并查找WTSDisconnected)。

因此,作为Michael pointed out,没有“多平台”通用答案(据我所知)。