动态桌面方案

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

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

    }
相关推荐
Teleger2 小时前
在window上使用c++控制鼠标点击,实现的exe
c++·单片机·计算机外设
June`3 小时前
高并发内存池如何实现
c++·tcmalloc·内存池
ComputerInBook3 小时前
C++ 关键字 constexpr 和 consteval 之注意事项
开发语言·c++·constexpr·consteval
米啦啦.3 小时前
STL(标准模板库)
开发语言·c++·stl
咩咦3 小时前
C++学习笔记08:指针和引用的区别
c++·学习笔记·指针·引用·指针和引用
洛水水3 小时前
【力扣100题】34.二叉搜索树中第K小的元素
c++·算法·leetcode
许长安4 小时前
gRPC Keepalive 机制
c++·经验分享·笔记·rpc
wangjialelele4 小时前
Linux SystemV 消息队列 + 责任链模式:实现客户端消息处理流水线
linux·服务器·c语言·网络·c++·责任链模式
智者知已应修善业4 小时前
51单片机4按键控制共阳LED霓虹灯切换1整体闪烁2流水下3流水上4间隔闪烁】2023-10-27
c++·经验分享·笔记·算法·51单片机
洛水水5 小时前
结构性设计模式详解
c++·设计模式