Définition du fond d'écran dans Windows à l'aide de Java


J'essaie de définir le fond d'écran dans Windows 7 en utilisant Java. J'ai essayé d'utiliser le code à partir des réponses ici et ici. Il fonctionne parfaitement dans Windows 8 et 10, mais pas dans 7. Il n'y a pas d'erreurs, cela ne fait tout simplement rien. J'ai essayé de définir différents fonds d'écran 1920x1080 (c'est la résolution définie dans le panneau de configuration) et différents formats de fichiers (png, jpg, bmp) et d'exécuter le programme sur quelques ordinateurs différents. Le code que j'ai après la ligne qui est censée définir le papier peint fonctionne bien. J'utilise JNA version 4.2.0 et Java 8 update 60.

Est-il possible de définir le fond d'écran dans Windows 7 en utilisant Java?

MODIFIER:

Voici mon code:

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

}

Par 'ça ne marche pas' je veux dire que le code s'exécute mais le fond d'écran ne change pas.

Author: Community, 2015-10-03

1 answers

Il s'avère que Windows 7 n'aime pas définir des images jpeg comme fond d'écran. Vous devez d'abord convertir le fichier image en bitmap, puis définir l'image bmp comme arrière-plan.

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