• 周三. 4 月 22nd, 2026

物嫩软件资讯网

软件资讯来物嫩

java开发动态壁纸

admin@wunen

4 月 30, 2025

**有一天,我突发奇想,想用java写一个可以实现动态壁纸功能的程序,所以我就花了2天时间写了一个

**

maven依赖

<dependencies>

        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>17-ea+11</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>17-ea+11</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-media</artifactId>
            <version>11.0.2</version>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>5.8.0</version>
        </dependency>

        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-web</artifactId>
            <version>11.0.2</version>
        </dependency>

        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>5.8.0</version> <!-- Check for the latest version -->
        </dependency>
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna-platform</artifactId>
            <version>5.8.0</version> <!-- Check for the latest version -->
        </dependency>


    </dependencies>

然后用javafx播放视频(最好全屏)(不知道为啥我这里javafx显示不了4k视频)

			java.io.File file = new java.io.File(“动态壁纸的路径”); 
            String url = file.toURI().toString();
            Media media = new Media(url);
            mediaPlayer = new MediaPlayer(media);
            mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE);
            mediaPlayer.setAutoPlay(true);   //设置自动播放
            MediaView mediaView = new MediaView(mediaPlayer);
            mediaView.setPreserveRatio(true);
            Rectangle2D screenRectangle = Screen.getPrimary().getBounds();

            mediaView.setFitWidth(screenRectangle.getWidth());
            mediaView.setFitHeight(screenRectangle.getHeight());
            pane.getChildren().add(mediaView);



            Scene scene = new Scene(pane, screenRectangle.getWidth(), screenRectangle.getHeight());
            stage.setFullScreen(true);
            stage.setTitle("setAsCamwallpaperce84aa7d-3cec-4ef8-b6fd-b3d76e56aa20");//这里设置一个题目

然后javafx写好了,在将0x052C指令发送给桌面,这样就可以使图标与壁纸分离,再把原来壁纸给隐藏掉,然后将我们刚刚写的窗口设成壁纸。(网上讲解很多,不仔细讲)

public class DynamicWallpaper {
    public static WinDef.HWND hide=null;
    public interface User32 extends StdCallLibrary {
        User32 INSTANCE = Native.load("user32", User32.class, W32APIOptions.DEFAULT_OPTIONS);
        WinDef.HWND FindWindow(String lpClassName, String lpWindowName);
        int SendMessage(WinDef.HWND hWnd, int msg, int wParam, int lParam);
        boolean EnumWindows(WinUser.WNDENUMPROC lpEnumFunc, Pointer data);
        WinDef.HWND FindWindowEx(WinDef.HWND hWndParent, WinDef.HWND hWndChildAfter, String lpClassName, String lpWindowName);
        boolean ShowWindow(WinDef.HWND hWnd, int nCmdShow);
        WinDef.HWND SetParent(WinDef.HWND hWndChild, WinDef.HWND hWndNewParent);

    }


    public static void main(String[] args) {

        User32 user32 = User32.INSTANCE;
        WinDef.HWND windowHandle = user32.FindWindow("Progman", null);
        user32.SendMessage(windowHandle, 0x052C, 0, 0);
        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, 0);
        WinDef.HWND hwnd = user32.FindWindow(null, "setAsCamwallpaperce84aa7d-3cec-4ef8-b6fd-b3d76e56aa20");
        user32.SetParent(hwnd,windowHandle);

    }
}

然后就完成所需的功能了。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注