动态桌面方案

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

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);
        }

    }
相关推荐
liulilittle17 小时前
OPENPPP2 Code Analysis Three
网络·c++·网络协议·信息与通信·通信
꧁Q༒ོγ꧂17 小时前
算法详解(一)--算法系列开篇:什么是算法?
开发语言·c++·算法
橘颂TA17 小时前
【剑斩OFFER】算法的暴力美学——力扣:1047 题:删除字符串中的所有相邻重复项
c++·算法·leetcode·职场和发展·结构于算法
早日退休!!!17 小时前
GCC与LLVM编译器深度解析:核心原理与差异对比(小白向)
c++·编辑器
ChoSeitaku17 小时前
15.C++入门:list|构造|使用|迭代器失效
开发语言·c++·list
R&ain17 小时前
C++中的深浅拷贝
开发语言·c++
R&ain17 小时前
C++的内联函数
c++·算法
羑悻的小杀马特18 小时前
gflags+spdlog实战:C++命令行参数与高性能日志的极致搭配行动指南
c++·spdlog·gflags
fpcc19 小时前
跟我学C++中级篇——Linux中文件和链接及重定向
linux·c++