【问题标题】:Setting the wallpaper in Windows using Java使用 Java 在 Windows 中设置壁纸
【发布时间】:2015-10-03 08:00:43
【问题描述】:

我正在尝试使用 Java 在 Windows 7 中设置墙纸。我尝试使用答案herehere 中的代码。它在 Windows 8 和 10 中完美运行,但在 Windows 7 中无法正常运行。没有错误,它只是不执行任何操作。我尝试设置不同的 1920x1080 壁纸(即在控制面板中设置的分辨率)和不同的文件格式(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");
    }

}

“它不起作用”是指代码运行但墙纸没有改变。

【问题讨论】:

  • 您应该在此处发布您有疑问的代码,并且请比“它不起作用”更具体。
  • @hotzst 抱歉,我知道我忘记了什么
  • 检查返回值和 Native.getLastError()。 Windows 很可能会告诉您出了什么问题。
  • @technomage 在 Windows 7 上 Native.getLastError() 总是返回 0 但返回值为 false 并且壁纸保持与之前相同。在 Windows 8 上,Native.getLastError() 返回 0 或 1460(似乎是随机的),但返回值始终为 true,并且设置了壁纸。

标签: java windows set jna wallpaper


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多