0

Linux で Java JFrame アプリケーションを実行しており、画面の状態 (つまり、スクリーン セーバーがアクティブになっているかどうか) を確認する必要があります。System や Toolkit などの Java 組み込み関数を使用して画面のプロパティを確認し、スクリーンセーバーがアクティブになっているかどうかを確認する方法はありますか?

4

1 に答える 1

0

Java はシステム タスクを直接処理できません。これを行うには、JNI (Java Native Interface) または JNA (Java Native Access) を使用する必要があります。JNAライブラリを使用して、次のようにSystemParametersInfoシステム コールを呼び出してみてください。

次の例では、JNA が提供するwin32 の例のコードを使用しています。

public class JNATest {

    public static void main(String[] args) {
        W32API.UINT_PTR uiAction = new W32API.UINT_PTR(User32.SPI_GETSCREENSAVERRUNNING);
        W32API.UINT_PTR uiParam = new W32API.UINT_PTR(0);
        W32API.UINT_PTR fWinIni = new W32API.UINT_PTR(0);
        PointerByReference pointer = new PointerByReference();

        User32.INSTANCE.SystemParametersInfo(uiAction, uiParam, pointer, fWinIni);

        //Is false if 0, is true if 1.
        boolean running = pointer.getPointer().getByte(0) == 1;

        System.out.println("Screen saver running: "+running);
    }
}


public interface User32 extends W32API {

    User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class, DEFAULT_OPTIONS);

    long SPI_GETSCREENSAVERRUNNING = 0x0072;

    boolean SystemParametersInfo(
        UINT_PTR uiAction,
        UINT_PTR uiParam,
        PointerByReference pvParam,
        UINT_PTR fWinIni
      );


}
于 2013-06-25T14:44:21.970 に答える