2010-09-07 3 views
6

Wie schalten Sie einen Monitor innerhalb einer Java-Anwendung ein und aus?Wie schalten Sie einen Monitor innerhalb einer Java-Anwendung ein und aus?

Falls Sie sich fragen, warum, ist dies eine Kiosk-Anwendung, bei der es gut wäre, die Monitore nachts auszuschalten. Ja, Sie können dies innerhalb der Bildschirmschoner-Einstellungen der Maschine tun, aber es wäre großartig, dies programmatisch zu tun und es nicht auf jedem Rechner konfigurieren zu müssen.

Antwort

10

Angenommen, Sie Ihre Java-Anwendungen auf Windows bereitstellen, können Sie diese WIN32API Funktionen nutzen:

// turn off monitor 
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) 2); 

// turn on monitor 
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) -1);  

Dann sind Sie ein wenig C-JNI wrapper zu Funktionen schreiben, die die genannten SendMessage und verwenden Sie den kleinen Wrapper den Monitor aufrufen auszuschalten aus Java.

+5

Alternativ zu JNI können Sie JNA verwenden, um das WIN32API direkt aufzurufen, ohne dass ein C-Klebstoffcode erforderlich ist. http://en.wikipedia.org/wiki/Java_Native_Access –

2

Während Sie die Monitorkonfigurationen mit Java abfragen können, gibt es keine Möglichkeit, die Monitore programmatisch ein- und auszuschalten, ohne JNI zu verwenden.

-4

Sie können ein Vollbild-Swing-Fenster öffnen, um es komplett schwarz zu machen, so dass der Monitor, soweit das beobachtbare Verhalten betroffen ist, ausgeschaltet ist.

+5

Gute Idee! Um Ihre Lösung noch besser zu machen, können Sie eine Webcam an den Kiosk-PC anschließen und ein Foto machen, bevor Sie "herunterfahren". Dann wäre es möglich zu berechnen (vielleicht mit der Java Advanced Imaging (JAI) API) und ein Bild der Reflexionen zu zeigen, die angezeigt würden, wenn der Monitor wirklich ausgeschaltet wäre. Besser als nur einen schwarzen Bildschirm zu zeigen, konnten jetzt mehr als 95 Prozent der Passanten den Unterschied nicht erkennen. Oh, und wenn der Monitor eine Power-on-LED auf der Vorderseite hat, wäre die Verwendung eines Ausbesserungsstiftes in der Farbe des Gehäuses am besten geeignet. – bobndrew

+3

Wäre nicht schwarze Sprühfarbe effektiver? :-) –

2

Ich habe diese exe namens nircmd im Netz gesehen. Es ist eine Freeware und kann von jedem benutzt werden. Es hat eine eingebaute Funktion dafür.

nircmd.exe monitor off 

Eine ausführliche Hilfe finden Sie auch auf der Website. Verwenden Sie sie einfach in Ihrem Programm und nennen es

Runtime.getRuntime().exec(this.getClass().getResource("nircmd.exe").getPath()); 

benutzen oder an das Windows-Verzeichnis legen und es von dort.