使用Java在Windows中设置壁纸

时间:2015-10-03 08:00:44

标签: java windows set jna wallpaper

我正在尝试使用Java在Windows 7中设置壁纸。我已尝试使用答案herehere中的代码。它在Windows 8和10中完美运行,但在7中没有。没有错误,它只是没有做任何事情。我尝试过设置不同的1920x1080壁纸(这是控制面板中设置的分辨率)和不同的文件格式(png,jpg,bmp),并在几台不同的计算机上运行程序。我应该设置壁纸的行之后的代码运行正常。我正在使用JNA版本4.2.0和Java 8更新60.

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

编辑:

这是我的代码:

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");
    }

}

由'它不起作用'我的意思是代码运行但壁纸不会改变。

1 个答案:

答案 0 :(得分:1)

原来,Windows 7不喜欢将jpeg图像设置为壁纸。您需要先将图像文件转换为Bitmap,然后将bmp图像设置为背景。