我可以用Java / Groovy以编程方式更改我的Windows桌面墙纸吗?

有没有一种方法可以使用Java(或Groovy)在Windows XP中更改桌面墙纸? 我有一个程序,每天(或任何时候)创build一个新的形象,我想自动更新我的桌面的方式。

我在这个网站上似乎有一些关于C ++或.NET的问题,但是我没有看到任何特定于Java的东西。

对不起,我有点落后@ ataylor的答案,因为我正在准备一个片段做这件事。 是的,JNA是一个正确的方法。 干得好:

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

你需要在类path上有JNA库才能工作。 这在Windows 7中进行了testing,在XP中可能会有一些细微差别,但我认为它应该工作。 该API大概是稳定的。

参考

  • 设置壁纸 – Coding4Fun
  • 如何确定屏幕保护程序是否在Java中运行?
  • W32API.java

编辑(2010/01/20):

我以前省略了选项SPIF_UPDATEINIFILESPIF_SENDWININICHANGE 。 现在正在使用这些Coding4Fun MSDN文章中的build议。

你可以做得更容易:

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

您可以编写batch file来更改墙纸 ,并使用该batch file执行该batch file,

Runtime.getRuntime.exec()

JNA Java库允许您轻松调用Win32 API调用。 特别是要更改桌面背景,您需要调用SystemParametersInfo函数。

看看这篇文章的JNA介绍: http : //today.java.net/article/2009/11/11/simplify-native-code-access-jna