2009-01-16 10 views
9

Ich bin auf der Suche nach einer Möglichkeit zu wissen, in einer Java-Anwendung (ohne JNI - es ist eine Multi-Plattform-Anwendung) kann erkennen, ob der Bildschirm gesperrt ist.Gibt es eine Möglichkeit für eine Java-Anwendung zu erkennen, ob der Bildschirm gesperrt ist?

Für Informationen ... unsere Anwendung zeichnet Zeit auf, während ein Benutzer arbeitet - wir möchten, dass es automatisch die Aufzeichnung stoppt, wenn der Bildschirm gesperrt ist, anstatt dass der Benutzer dies explizit tun muss.

+0

nur neugierig, aber vielleicht führt es auch zu besseren Antworten: Was ist der Zweck dafür? –

+0

Die Anwendung zeichnet Zeit auf, während ein Benutzer arbeitet - wir möchten, dass die Aufzeichnung beendet wird, wenn der Bildschirm automatisch gesperrt wird, anstatt sie explizit auszuführen. –

+0

Es gab ein ähnliches Bedürfnis in Spark (in meiner Antwort unten erwähnt): Set Presence To Away Wenn Workstation gesperrt ist ... nützlich für diesen plattformübergreifenden IM-Client. – VonC

Antwort

1

Ich glaube nicht, dass es eine API für das oder sogar eine Möglichkeit gibt, alles zu tun. Das Parsen von Screenshots, die von java.awt.Robot generiert werden, ist weder plattform- noch versions- oder gar konfigurationsunabhängig, und im Allgemeinen glaube ich nicht, dass "screen is locked" ein hinreichend definiertes Konzept ist, das in diesem Sinne verwendet werden sollte. Unter Linux kann es mehr als nur einen "Bildschirm" (X-Server) geben, Sie können zu Konsolenterminals wechseln, Anwendungen, auf denen ein (oder mehrere) Maschinen laufen, können ihre GUIs auf einem anderen Computer über das Netzwerk anzeigen ...

+0

Ja - sicherlich einige Probleme, aber ich dachte, Sie könnten in der Lage zu definieren "Bildschirm ist gesperrt" in Bezug auf eine Anwendung in einem bestimmten Fenster ausgeführt wird - ob X oder Windows. –

1

Ich bestätige, dass es anscheinend keine Java-API gibt, um einen Bildschirmsperrstatus zu erkennen.

Spark Entwickler gab es einen Versuch im Jahr 2006 (wie diese thread shows), aber ohne Details zu den spezifischen der Implementierung zu geben.
Es ist jedoch wahrscheinlich, dass es JNI und nativen Aufruf an Funktionen wie WTSQuerySessionInformation beteiligt (Um zu erkennen, ob die Verbindung getrennt WTSQuerySessionInformation(NULL, WTS_CURRENT_SESSION, WTSConnectState) und suchen Sie nach WTSDisconnected).

So, wie Michael pointed out, gibt es keine "Multi-Plattform" universelle Antwort (nach meinem besten Wissen).

+0

so gibt es eine Möglichkeit, auf Windows nur zu erkennen sagen win7 – Johnydep

+0

@Johnydep, dass könnte möglich sein, aber ich bin nicht bewusst, eine bestimmte Methode zur Erkennung der Sperre Status auf Win7 – VonC

Verwandte Themen