我可以在Java / Groovy中以编程方式更改Windows桌面壁纸吗?
有没有办法使用Java(或Groovy)在Windows XP中更改桌面壁纸?我有一个程序,每天(或无论何时)都会创建新映像,并且我想要一种自动更新桌面的方法。
我在这个网站上似乎有一些关于C++或.NET的问题,但我没有看到任何特定于Java的东西。
有没有办法使用Java(或Groovy)在Windows XP中更改桌面壁纸?我有一个程序,每天(或无论何时)都会创建新映像,并且我想要一种自动更新桌面的方法。
我在这个网站上似乎有一些关于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
);
}
}
您需要在类路径上具有 JNA 库才能使其正常工作。这是在Windows 7中测试的,XP中可能有一些细微差别,但我认为它应该有效。该 API 大概是稳定的。
我以前省略了选项和.这些现在正在按照Coinging4Fun MSDN文章中的建议使用。SPIF_UPDATEINIFILE
SPIF_SENDWININICHANGE
您可以更轻松地完成此操作:
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);
}
}