在 Java 中更换 Windows 10 张壁纸

Change Windows 10 Wallpaper in Java

我想使用 Java 更换我的 Windows 墙纸,并在网上搜索了解决方案。 If found this code on Whosebug.

import java.util.HashMap;

import com.sun.jna.Native;
import com.sun.jna.platform.win32.WinDef.UINT_PTR;
import com.sun.jna.win32.*;

public class WallpaperChanger {
   public static void main(String[] args) {
      //supply your own path instead of using this one
      String path = "D:\stone.png";

      SPI.INSTANCE.SystemParametersInfo(
          new UINT_PTR(SPI.SPI_SETDESKWALLPAPER), 
          new UINT_PTR(0), 
          path, 
          new UINT_PTR(SPI.SPIF_UPDATEINIFILE | SPI.SPIF_SENDWININICHANGE));
   }

   public interface SPI extends StdCallLibrary {

      //from MSDN article
      long SPI_SETDESKWALLPAPER = 20;
      long SPIF_UPDATEINIFILE = 0x01;
      long SPIF_SENDWININICHANGE = 0x02;

      @SuppressWarnings("serial")
      SPI INSTANCE = (SPI) Native.loadLibrary("user32", SPI.class, new HashMap<Object, Object>() {
         {
            put(OPTION_TYPE_MAPPER, W32APITypeMapper.UNICODE);
            put(OPTION_FUNCTION_MAPPER, W32APIFunctionMapper.UNICODE);
         }
      });

      boolean SystemParametersInfo(
          UINT_PTR uiAction,
          UINT_PTR uiParam,
          String pvParam,
          UINT_PTR fWinIni
        );
    }
}

但这对我不起作用,我收到此错误:

Exception in thread "main" java.lang.NoSuchMethodError: com.sun.jna.IntegerType.(IJZ)V at com.sun.jna.platform.win32.WinDef$UINT_PTR.(WinDef.java:566) at de.dogyman.bc.main.WallpaperChanger.main(WallpaperChanger.java:15)

我以前从未使用过 JNA,我真的不知道代码到底做了什么,所以我不知道错误从何而来。

我将这些 jar 导入到我的构建路径中:

JNA Platform

JNA

我希望有人能帮助我找到解决方案或给我另一种更换壁纸的方法Java。

您使用的 jna.jarjna-platform.jar 版本不兼容。您可以在 https://github.com/java-native-access/jna

下载这些 jar 的最新版本