libVLC 动态视频壁纸

在 Windows 上,你可能需要使用 Windows API 来设置壁纸,而在 Linux 上,你可能需要使用某种桌面环境特有的方法。在 macOS 上,这一功能可能受到限制。

效果图如下所示:

以下是一个简单的示例,说明了如何在 Windows 上使用 C++ 和 libVLC 库来实现这一功能。请注意,这个示例可能需要根据你的具体需求和操作系统进行调整:

1.使用 FindWindow 函数来获取是否存在 Progman 窗口的句柄。

Progman 是一个系统进程,它是桌面管理器的名称。Progman 进程负责管理桌面窗口,Progman 窗口具有以下特点:

  • 它是系统启动时自动运行的。
  • 它是一个顶级窗口,没有父窗口。
  • 它的窗口类名为 “Progman”。
  • 它通常位于所有其他窗口的后面,因为它是一个底层窗口,用于显示桌面背景和图标。
	HWND progman = FindWindow(L"Progman", NULL);if (progman == NULL)return -1;

2.EnumWindows查找桌面窗口。

SHELLDLL_DefView 是桌面窗口视图的类名。

这个函数可以用来查找特定的窗口,或者执行对每个窗口的处理,函数原型如下:

BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM      lParam
);

参数说明:

  • lpEnumFunc:指向应用程序定义的回调函数的指针,该函数接受每个窗口的句柄和应用程序定义的值。回调函数的返回值类型必须是 BOOL。
  • lParam:一个应用程序定义的值,将传递给回调函数。

回调函数的原型如下:回调函数应该返回 TRUE 以继续枚举,或者返回 FALSE 以停止枚举。

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam
);
  • hwnd:顶层窗口的句柄。
  • lParam:由 EnumWindows 函数传递的应用程序定义的值。

3.使用libVLC播放视频,并设置窗口句柄。

	// 初始化 VLC 实例libvlc_instance_t *vlcInstance = libvlc_new(0, NULL);// 加载媒体文件const char *mediaPath = "F:\\ds.mp4"; // 替换为你的视频文件路径libvlc_media_t *vlcMedia = libvlc_media_new_path(vlcInstance, mediaPath);// 创建一个 MediaPlayer 实例libvlc_media_player_t *vlcMediaPlayer = libvlc_media_player_new_from_media(vlcMedia);// 等待元数据加载完成libvlc_media_parse(vlcMedia);libvlc_media_player_set_hwnd(vlcMediaPlayer, (void *)workerw);

完整源码:

#include <windows.h>
#include <vlc/vlc.h>
#include <iostream>HWND workerw;
BOOL CALLBACK DesktopWindow(HWND hwnd,LPARAM lparam)
{HWND p = FindWindowEx(hwnd, NULL, L"SHELLDLL_DefView", NULL);if (p == NULL)return 1;workerw = FindWindowEx(NULL, hwnd, L"WorkerW", NULL);
}int  main() 
{HWND progman = FindWindow(L"Progman", NULL);if (progman == NULL)return -1;DWORD_PTR result = 0;SendMessageTimeout(progman, 0x052c, NULL, NULL, SMTO_NORMAL, 1000, &result);EnumWindows(DesktopWindow, NULL);// 初始化 VLC 实例libvlc_instance_t *vlcInstance = libvlc_new(0, NULL);// 加载媒体文件const char *mediaPath = "F:\\ds.mp4"; // 替换为你的视频文件路径libvlc_media_t *vlcMedia = libvlc_media_new_path(vlcInstance, mediaPath);// 创建一个 MediaPlayer 实例libvlc_media_player_t *vlcMediaPlayer = libvlc_media_player_new_from_media(vlcMedia);// 等待元数据加载完成libvlc_media_parse(vlcMedia);libvlc_media_player_set_hwnd(vlcMediaPlayer, (void *)workerw);Sleep(1000);// 播放视频libvlc_media_player_play(vlcMediaPlayer);std::cin.get();// 清理资源libvlc_media_player_stop(vlcMediaPlayer);libvlc_media_player_release(vlcMediaPlayer);libvlc_release(vlcInstance);return 0;
}

更多参考:

libVLC 事件机制-CSDN博客

libVLC windows开发环境搭建-CSDN博客

libVLC 视频裁剪

libVLC 视频抓图

libVLC 调节色温、色调、亮度、对比度、饱和度、高光

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/775510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu16.04 切换系统python和gcc版本

4.切换系统python版本 sudo update-alternatives --config python5.切换系统gcc版本 sudo update-alternatives --config gccubuntu16.04中的gcc版本及版本切换 5.查看opencv版本 pkg-config opencv --modversion查看cuda版本 cat /usr/local/cuda/version.txt或者 nvcc …

[Qt] QString::fromLocal8Bit 的使用误区

QString::fromLocal8Bit 是一个平台相关的函数。默认情况下在 Windows 下 就是 gbk 转 utf-8 ,在 Linux就应该是无事发生。因为Linux平台默认的编码方式就是 utf-8 可以通过 void QTextCodec::setCodecForLocale(QTextCodec *c)来修改 Qt默认的编码方式。如下 第一输出乱码的…

【单调队列单调栈专题】【蓝桥杯备考训练】:矩形牛棚、单调栈、滑动窗口、子矩阵、最大子序和、烽火传递【已更新完成】

目录 1、矩形牛棚&#xff08;usaco training 6.1&#xff09; 思路&#xff1a; 预处理的过程&#xff1a; 判断左右边界的过程&#xff1a; 代码&#xff1a; 2、单调栈&#xff08;单调栈模板&#xff09; 思路&#xff1a; 基本步骤&#xff1a; 1、维护单调性 2、处理要求…

vue组件如何使用?

今天我随便试两个组件 第一个轮播图 在minn.js 引入 import { createApp } from vue; import { Swipe, SwipeItem } from vant; const app createApp(); app.use(Swipe); app.use(SwipeItem); <van-swipe class"my-swipe" :autoplay"3000" indica…

python学习15:python中的input语句

python中的input语句 我们前面学习过print语句&#xff0c;可以将内容输出到屏幕上&#xff1b;在python中&#xff0c;与之对应的还有一个input语句&#xff0c;用来获取键盘输入。 数据输出&#xff1a;print 数据输入&#xff1a;input 使用上也很简单&#xff1a; 使用inp…

jvm高级面试题-2024

说下对JVM内存模型的理解 JVM内存模型主要是指Java虚拟机在运行时所使用的内存结构。它主要包括堆、栈、方法区和程序计数器等部分。 堆是JVM中最大的一块内存区域&#xff0c;用于存储对象实例。一般通过new关键字创建的对象都存放在堆中&#xff0c;堆的大小可以通过启动参数…

http 超全状态码

HTTP&#xff08;超文本传输协议&#xff09;是一种用于传输超文本的应用层协议。在进行HTTP通信时&#xff0c;服务器会向客户端返回一个状态码&#xff0c;用于表示请求的处理结果。 状态码由3位数字组成&#xff0c;使用第1个数字表示响应的类别&#xff0c;一共5种&#x…

广告牌效果的C#实现

前言 这个效果是在以前的项目时候&#xff0c;特效那边想要一个广告牌效果但是我不懂什么是广告牌两个人沟通半天&#xff0c;才把东西做出来。 代码如下 using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine;[ExecuteInEdit…

视图的作用

目录 视图的作用 创建视图 为 scott 分配创建视图的权限 查询视图 复杂视图的创建 视图更新的限制问题 更新视图中数据的部门编号&#xff08;视图的存在条件&#xff09; 限制通过视图修改数据表内容 创建只读的视图 复杂视图创建 oracle从入门到总裁:​​​​​​h…

关于GPT-SoVITS语音合成的效果展示(西游之西天送葬团)

目录 使用效果总结合成效果展示 使用效果总结 使用的是2024年03月21日22点28分更新的版本。 使用起来很方便&#xff0c;从它“自带界面”这点就能看出&#xff0c;易于使用也是目的之一&#xff0c;而且从训练到推理的每个步骤都能在界面中完成。 集成了多个实用工具&#…

快速创建zookeeper集群

先说明&#xff0c;我很穷&#xff01;&#xff01;&#xff0c;开不了多个虚拟机&#xff0c;zookeeper集群的3个节点都放在同一个虚拟机&#xff0c;所以搭建是一个伪集群&#xff0c;因为一个服务器挂机&#xff0c;所有节点都会停止。工作实际情况安装到三个服务器&#xf…

Doris 数据集成 Catalog

Doris 数据集成 Catalog 多源数据目录(Multi-Catalog)功能,旨在能够更方便对接外部数据目录,以增强Doris的数据湖分析和联邦数据查询能力。 在之前的 Doris 版本中,用户数据只有两个层级:Database 和 Table。当我们需要连接一个外部数据目录时,我们只能在Database 或 …

3、RabbitMQ_工作模式

一、简单模式 简介 简单模式 HelloWorld。一个生产者、一个消费者&#xff0c;不需要设置交换机使用默认的交换机。 代码示例 生产者public class Producer {//队列名称private final static String QUEUE_NAME "hello";public static void main(String[] args)…

【Linux】文件查看命令(六)

文章目录 wc 命令grep命令&#xff08;常用&#xff09;more 命令cat 命令less 命令&#xff08;不常用&#xff09;head 命令&#xff08;不常用&#xff09;tail 命令&#xff08;不常用&#xff09; wc 命令 功能描述: wc 命令用于统计文件中的字节数、字数、行数等信息。 …

H5抓包——Android 使用电脑浏览器 DevTools调试WebView

H5抓包——Android 使用电脑浏览器 DevTools调试WebView 一、使用步骤 1、电脑通过数据线连接手机&#xff0c;开启USB调试&#xff08;打开手机开发者选项&#xff09; 2、打开待调试的H5 App&#xff0c;进入H5界面 3、打开电脑浏览器&#xff0c;调试界面入口 如果用ed…

第十一章:位运算符与位运算

文章目录 第十一章&#xff1a;位运算符与位运算1.按位与运算&#xff1a;&2.按位或运算&#xff1a;|3.按位异或运算&#xff1a;^4.取反运算符&#xff1a;~5.左移运算符&#xff1a;<<6.右移运算符&#xff1a;>>总结 第十一章&#xff1a;位运算符与位运算…

免费SSL证书和付费SSL证书的区别点

背景&#xff1a; 在了解免费SSL证书和付费SSL证书的区别之前&#xff0c;先带大家了解一下SSL证书的概念和作用。 SSL证书的概念&#xff1a; SSL证书就是基于http超文本传输协议的延伸&#xff0c;在http访问的基础上增加了一个文本传输加密的协议&#xff0c;由于http是明…

二分练习题——妮妮的月饼工厂

妮妮的月饼工厂 题目分析 这里出现了“最高高度”&#xff0c;那么可以考虑用二分去做。 第一阶段二段性分析 希望月饼的高度最大&#xff0c;而月饼的高度要满足一个条件&#xff0c;就是按照该高度切出来的月饼的块数应该大于等于K块。那么现在就是满足条件的最大值&…

【爬虫基础】第6讲 opener的使用

在爬虫中&#xff0c;opener是一个用来发送HTTP请求的对象。它可以用来模拟浏览器发送请求&#xff0c;包括设置请求头、处理Cookie等操作。使用opener可以实现一些高级功能&#xff0c;如模拟登录、处理验证码等。 方法1&#xff1a; from urllib.request import Request,bu…

ARMday7作业

实现三个按键的中断&#xff0c;现象和代码 do_ipr.c #include "stm32mp1xx_gic.h" #include "stm32mp1xx_exti.h" extern void printf(const char *fmt, ...); unsigned int i 0; void do_irq(void) {//获取要处理的中断的中断号unsigned int irqnoGI…