JNA依赖
net.java.dev.jna jna 5.8.0 net.java.dev.jna jna-platform 5.8.0
关键代码
WinDef.HWND hide=null;
// 开启背景窗口 若需要动画 可能会阻塞 需要新开线程 窗体推荐全屏无边框
new Thread(Testframe::new).start();// 若需要响应事件 需要使用JNA 监听全局事件
User32 user32 = User32.INSTANCE;
// 查找 图标 背景窗体
WinDef.HWND windowHandle = user32.FindWindow("Progman", null);
// 利用WIN10切换壁纸BUG 把图标与壁纸拆分开来
user32.SendMessageTimeout(windowHandle, 0x052c, null, null, SMTO_NORMAL,
0x3e8, null);
// 寻找原来的壁纸层
user32.EnumWindows((hWnd, data) -> {
WinDef.HWND defview = user32.FindWindowEx(hWnd, null, "SHELLDLL_DefView", null);
if (defview != null) {
hide = user32.FindWindowEx(null, hWnd, "WorkerW", null);
}
return true;
}, null);
// 隐藏原来的壁纸层
user32.ShowWindow(hide, SW_HIDE);
// 查找 自己要作为壁纸的窗体
WinDef.HWND hwnd = user32.FindWindow(null, "BG_frame");
// 把他添加到图标层后面
user32.SetParent(hwnd,windowHandle);
全部相关代码下载:http://49.234.47.204:2222/s/6383x8iS9nFx9gp
效果
Java开发动态壁纸
主要查考文章
https://zhuanlan.zhihu.com/p/37877070



