动态桌面方案

整理一下可以实现动态桌面的方案。

1. qt

qt使用QMediaPlayer播放视频,对于mp4等视频依赖解码后端,比如ffmpeg,需要编译multimedia_backend_ffmpeg

2. ffmpeg+kanzi 3.6

https://ffmpeg.org//

编译ffmpeg比较困难,可去官网下载,一般是x86版本,所以不要用kanzi 3.9(64位)

ffmpeg-5.1.2-full_build-shared 稳定

ffmpeg-8.0.1-full_build-shared 最新

3. gstreamer + glfw + opengl

https://gstreamer.freedesktop.org/download

可以选择32-bit

MSVC 32-bit (VS 2019, Release CRT)

  • 1.26.10 runtime installer
  • 1.26.10 development installer

glfw + opengl封装成了2d引擎 自制2d游戏引擎

gst-plugins 发布

exe旁放gst-plugins文件夹,里面有

glib-2.0-0.dll

gobject-2.0-0.dll

gstapp-1.0-0.dll

gstreamer-1.0-0.dll

gstvideo-1.0-0.dll

程序支持播放视频后,再把窗口设置为windows桌面的子窗口就行。

c 复制代码
if (isDesktop) {
        SendMessageToDesktop();//发送消息
        Sleep(100);             // 2. 稍微等一下(可选,防止系统还没反应过来)
        HWND desktopWnd = findDesktopIconWnd();//获取桌面句柄

        if (desktopWnd)
        {
            GetWindow().SetIsDesktopFlag(true);
            HWND hwndGLFW = GetWindow().GetNativeWindowID();
            CC_INFO("Window handle: %p \n", hwndGLFW);
            SetParent(hwndGLFW, desktopWnd);

            int screenW = GetSystemMetrics(SM_CXSCREEN);
            int screenH = GetSystemMetrics(SM_CYSCREEN);

            // 设置窗口大小和位置,并确保窗口在 WorkerW 下方
            SetWindowPos(hwndGLFW,
                HWND_BOTTOM,
                0, 0,
                screenW, screenH,
                SWP_NOACTIVATE | SWP_FRAMECHANGED | SWP_SHOWWINDOW);
        }
        else {
            exit(0);
        }

    }
相关推荐
郝学胜_神的一滴16 小时前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake
Mahut1 天前
我用 Electron + FFmpeg 做了一个本地视频处理工作站 ClipForge
前端·ffmpeg·electron
卷无止境3 天前
C++ 的Eigen 库全解析
c++
卷无止境3 天前
现代 C++特性大盘点:一门脱胎换骨的老语言
c++·后端
郝学胜_神的一滴3 天前
CMake 27:缓存变量的特性、语法、类型与实操全解
c++·cmake
Quz4 天前
QML Hello World 入门示例
qt
博客18005 天前
酷宝的使用方法,超好用的免费界面库,C++、MFC可用
c++·mfc·界面库·库来帮·酷宝
郝学胜_神的一滴5 天前
CMake 026:属性体系精讲、四大作用域全解 & 实战代码落地
c++·cmake
众少成多积小致巨5 天前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
xcyxiner7 天前
DicomViewer (dcmtk读取dcm文件)5
qt