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.
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.