Impostazione dello sfondo in Windows utilizzando Java


Sto cercando di impostare lo sfondo in Windows 7 usando Java. Ho provato a usare il codice dalle risposte qui e qui . Funziona perfettamente in Windows 8 e 10, ma non in 7. Non ci sono errori, semplicemente non fa nulla. Ho provato a impostare diversi sfondi 1920x1080 (questa è la risoluzione impostata nel pannello di controllo) e diversi formati di file (png, jpg, bmp) e ad eseguire il programma su alcuni computer diversi. Il codice che ho dopo la linea che dovrebbe impostare la carta da parati funziona bene. Sto usando JNA versione 4.2.0 e Java 8 update 60.

C'è un modo per impostare lo sfondo in Windows 7 usando Java?

MODIFICA:

Ecco il mio codice:

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

}

Con 'non funziona' intendo che il codice viene eseguito ma lo sfondo non cambia.

Author: Community, 2015-10-03

1 answers

Risulta che a Windows 7 non piace impostare le immagini jpeg come sfondo. È necessario convertire prima il file immagine in Bitmap e quindi impostare l'immagine bmp come sfondo.

 1
Author: marti201, 2015-10-04 13:00:04