用Java更改Windows 10壁纸
我想用Java更改我的Windows壁纸,并在网上搜索解决方案用Java更改Windows 10壁纸,java,windows,jna,wallpaper,Java,Windows,Jna,Wallpaper,我想用Java更改我的Windows壁纸,并在网上搜索解决方案 import java.util.HashMap; 导入com.sun.jna.Native; 导入com.sun.jna.platform.win32.WinDef.UINT\u PTR; 导入com.sun.jna.win32。*; 公共类壁纸转换器{ 公共静态void main(字符串[]args){ //提供您自己的路径,而不是使用此路径 String path=“D:\\stone.png”; SPI.INSTANCE.S
import java.util.HashMap;
导入com.sun.jna.Native;
导入com.sun.jna.platform.win32.WinDef.UINT\u PTR;
导入com.sun.jna.win32。*;
公共类壁纸转换器{
公共静态void main(字符串[]args){
//提供您自己的路径,而不是使用此路径
String path=“D:\\stone.png”;
SPI.INSTANCE.SystemParametersInfo(
新UINT_PTR(SPI.SPI_Setdesk壁纸),
新UINT_PTR(0),
路径
新UINT_PTR(SPI.SPIF_UPDATEINIFILE | SPI.SPIF_sendwinichange));
}
公共接口SPI扩展StdCallLibrary{
//来自MSDN文章
长SPI_SETDESKWALLPAPER=20;
长SPIF_UpdateInFile=0x01;
长SPIF_sendwinichange=0x02;
@抑制警告(“串行”)
SPI实例=(SPI)Native.loadLibrary(“user32”,SPI.class,new HashMap()){
{
put(选项类型映射器,w32 pitypemapper.UNICODE);
put(选项函数映射器,W32APIFunctionMapper.UNICODE);
}
});
布尔系统参数信息(
行动,
UINT_PTR uiParam,
字符串pvParam,
乌恩图夫维尼尼酒店
);
}
}
但这对我不起作用,我得到了这个错误:
线程“main”java.lang.NoSuchMethodError中出现异常:com.sun.jna.IntegerType.(IJZ)V
位于com.sun.jna.platform.win32.WinDef$UINT_PTR(WinDef.java:566)
位于de.dogyman.bc.main.wallparchanger.main(wallparchanger.java:15)
我以前从未使用过JNA,也不知道代码到底做了什么,所以我不知道错误来自哪里
我将这些JAR导入我的构建路径:
我希望有人能帮我找到解决方案,或者给我另一种用Java更改墙纸的方法。您使用的是不兼容的
jna.jar
和jna platform.jar
。您可以在下载这些jar的最新版本,删除groovy标记,因为这看起来与groovy无关。您应该扩展platform.jar中提供的User32
库,并以相同的方式初始化映射(假设映射中不存在您需要的方法)。
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 = "D:\\stone.png";
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;
@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
);
}
}