tags:

views:

294

answers:

2

I'm looking for a way to know in a Java application (without JNI - it's a multi-platform application) can detect if the screen is locked.

For information... our application records time while a user is working - we want it to automatically stop recording when the screen is locked instead of the user having to do so explicitly.

+1  A: 

I don't think there is an API for that or even a way to do it all. Parsing screenshots generated by java.awt.Robot is neither platform- nor version- or even configuration-independant, and in general, I don't think "screen is locked" is a well-enough defined concept to be used in this sense - on Linux, there can be more than just one "screen" (X server), you can switch to console terminals, you can have applications running one (or more) machines display their GUIs on another machine over the network...

Michael Borgwardt
Yep - certainly some issues, but I thought you'd be able to define "screen is locked" with respect to an application running in a specific window - whether X or Windows.
Nick Pierpoint
+1  A: 

I confirm there seems to be no Java API to detect a screen lock status.

Spark developer gave it a try in 2006 (like this thread shows), but without giving out any details on the specific of the implementation.
However, it is likely it involved JNI and native call to functions like WTSQuerySessionInformation (To detect if disconnected use WTSQuerySessionInformation(NULL, WTS_CURRENT_SESSION, WTSConnectState) and look for WTSDisconnected).

So, as Michael pointed out, there is no "multi-platform" universal answer (to the best of my knowledge).

VonC