使用Java在Windows中设置壁纸

我正在尝试使用Java在Windows 7中设置壁纸。 我试过使用这里和这里的答案代码。 它在Windows 8和10中完美工作,但不是在7中。没有错误,它只是没有做任何事情。 我已经尝试设置不同的1920×1080壁纸(这是控制面板中设置的分辨率)和不同的文件格式(PNG,JPG,BMP),并在几个不同的计算机上运行该程序。 我应该设置壁纸的行后的代码运行良好。 我正在使用JNA版本4.2.0和Java 8更新60。

有没有什么办法可以在Windows 7中使用Java设置壁纸?

编辑:

这是我的代码:

import java.util.HashMap; import com.sun.jna.Native; import com.sun.jna.platform.win32.WinDef.UINT_PTR; import com.sun.jna.win32.StdCallLibrary; import com.sun.jna.win32.W32APIFunctionMapper; import com.sun.jna.win32.W32APITypeMapper; public class WallpaperChanger { public interface SPI extends StdCallLibrary { 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); } public static void main(String[] args) { System.out.println("changing"); String filename = "C:\\wallpapers\\wallpaper.jpg"; SPI.INSTANCE.SystemParametersInfo( new UINT_PTR(SPI.SPI_SETDESKWALLPAPER), new UINT_PTR(0), filename, new UINT_PTR(SPI.SPIF_UPDATEINIFILE | SPI.SPIF_SENDWININICHANGE)); System.out.println("changed"); } } 

通过“它不工作”我的意思是代码运行,但壁纸不会改变。

Solutions Collecting From Web of "使用Java在Windows中设置壁纸"