0

我有一个在 Linux 上运行的 Java JFrame 应用程序,我需要检查屏幕的状态(即屏幕保护程序是否已激活)。是否有使用 Java 内置函数(如 System 或 Toolkit)来检查屏幕属性以及是否激活了屏幕保护程序?

4

1 回答 1

0

Java 不能直接处理系统任务。您应该使用 JNI(Java 本机接口)或 JNA(Java 本机访问)来执行此操作。尝试使用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 回答