Puis-je changer mon fond d'écran Windows par programme en Java/Groovy?
Existe-t-il un moyen d'utiliser Java (ou Groovy) pour changer mon fond d'écran dans Windows XP? J'ai un programme qui crée une nouvelle image tous les jours (ou chaque fois) et je voudrais un moyen de mettre à jour automatiquement mon bureau.
Il me semble que j'ai quelques questions sur ce site sur C++ ou.NET, mais je n'ai rien vu de spécifique à Java.
4 answers
Désolé, je suis un peu en retard sur la réponse de @ataylor parce que je préparais un extrait pour le faire. Oui, JNA est une approche correcte. Ici, vous allez:
import java.util.HashMap;
import com.sun.jna.Native;
import com.sun.jna.platform.win32.WinDef.UINT_PTR;
import com.sun.jna.win32.*;
public class WallpaperChanger {
public static void main(String[] args) {
//supply your own path instead of using this one
String path = "C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg";
SPI.INSTANCE.SystemParametersInfo(
new UINT_PTR(SPI.SPI_SETDESKWALLPAPER),
new UINT_PTR(0),
path,
new UINT_PTR(SPI.SPIF_UPDATEINIFILE | SPI.SPIF_SENDWININICHANGE));
}
public interface SPI extends StdCallLibrary {
//from MSDN article
long SPI_SETDESKWALLPAPER = 20;
long SPIF_UPDATEINIFILE = 0x01;
long SPIF_SENDWININICHANGE = 0x02;
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
);
}
}
Vous devez avoir les bibliothèques JNA sur le chemin de classe pour que cela fonctionne. Cela a été testé dans Windows 7, il pourrait y avoir quelques nuances dans XP mais je pense que cela devrait fonctionner. Cette API est vraisemblablement stable.
Références
- Réglage Fond d'écran-Coding4Fun
- Comment déterminer si un économiseur d'écran est en cours d'exécution en Java?
- W32API.java
Modifier (2010/01/20):
Auparavant, j'avais omis les options SPIF_UPDATEINIFILE
et SPIF_SENDWININICHANGE
. Ceux-ci sont maintenant utilisés comme ils ont été suggérés dans l'article Coding4Fun MSDN.
Vous pouvez le faire plus facilement:
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinDef.PVOID;
import com.sun.jna.win32.W32APIOptions;
public class Wallpaper {
public static interface User32 extends Library {
User32 INSTANCE = (User32) Native.loadLibrary("user32",User32.class,W32APIOptions.DEFAULT_OPTIONS);
boolean SystemParametersInfo (int one, int two, String s ,int three);
}
public static void main(String[] args) {
User32.INSTANCE.SystemParametersInfo(0x0014, 0, "C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg" , 1);
}
}
Vous pouvez écrire un fichier batch pour changer le papier peint , et exécuter ce fichier batch en utilisant,
Runtime.getRuntime.exec()
La bibliothèque java JNA vous permet d'appeler facilement les appels d'API Win32. En particulier, pour modifier l'arrière-plan du bureau, vous devez appeler la fonction SystemParametersInfo .
Jetez un oeil à cet article pour une introduction à la JNA: http://today.java.net/article/2009/11/11/simplify-native-code-access-jna