2010-09-07 14 views
6

Jak włączać i wyłączać monitor z poziomu aplikacji Java?Jak włączać i wyłączać monitor z poziomu aplikacji Java?

Jeśli zastanawiasz się dlaczego, jest to aplikacja w stylu kiosku, w której dobrze byłoby wyłączyć monitory w nocy. Tak, możesz to zrobić w ustawieniach wygaszacza ekranu urządzenia, ale byłoby wspaniale zrobić to programowo i uniknąć konieczności konfigurowania go na każdym komputerze.

Odpowiedz

10

Zakładając wdrażania aplikacji Java w systemie Windows, można użyć tej funkcji Win32API:

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

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

Potem piszesz trochę C-JNI wrapper do funkcji, które wymagają wspomnianą SendMessage i używają mało otoki, aby wyłączyć monitor z Java.

+5

Alternatywnie do JNI, możesz użyć JNA do bezpośredniego wywoływania WIN32API, unikając potrzeby stosowania jakiegokolwiek kodu kleju C. http://pl.wikipedia.org/wiki/Java_Native_Access –

2

Podczas gdy można zapytać o konfiguracje monitora za pomocą Javy, nie ma możliwości włączenia i wyłączenia monitorów bez użycia JNI.

-4

Możesz otworzyć okno obracania na pełnym ekranie, aby było całkowicie czarne, więc monitor, jeśli chodzi o obserwowalne zachowanie, jest wyłączony.

+5

Dobry pomysł! Aby Twoje rozwiązanie było jeszcze lepsze, można podłączyć kamerę internetową do kiosku-PC i zrobić zdjęcie przed "zamknięciem". Następnie można obliczyć (być może za pomocą interfejsu Java Advanced Imaging (JAI) API) i pokazać obraz odbić, który byłby wyświetlany, gdyby monitor był naprawdę wyłączony. Lepsze niż pokazywanie tylko czarnego ekranu, teraz ponad 95 procent przechodzących ludzi nie mogło odróżnić. Aha, i jeśli monitor ma włączoną diodę LED z przodu, najbardziej odpowiednie byłoby użycie do tego celu odpowiedniego ołówka w kolorze skrzynki. – bobndrew

+3

Czy farba z czarnego lakieru nie byłaby bardziej skuteczna? :-) –

2

Widziałem tego exe o nazwie nircmd w sieci. Jest darmowy i może być używany przez nikogo. Ma wbudowaną funkcję do robienia tego.

nircmd.exe monitor off 

Szczegółowa pomoc znajduje się również na stronie internetowej. Wystarczy użyć go w swoim programie i nazwać używając

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

lub umieścić go w katalogu windows i uruchomić go stamtąd.

Powiązane problemy