libVLC 动态视频壁纸

news2024/11/18 12:25:56

在 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.coloradmin.cn/o/1550145.html

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

相关文章

ubuntu22.04系统安装Opencv4.8.0+Opencv-contrib4.8.0

一、安装下载所需工具 1.打开终端&#xff0c;输入以下命令来更新软件源&#xff1a; sudo apt-get update 2.安装wget&#xff1a; sudo apt-get install wget 3.下载opencv和opencv-contrib包&#xff1a; wget -O opencv-4.8.0.zip https://github.com/opencv/opencv/…

Vue的安装与启动

工程化 通过vue脚手架创建vue项目 1.全局安装脚手架 npm install vue/cli -g 注&#xff1a;如果网络太慢&#xff0c;则优先安装淘宝镜像 npm install -g cnpm --registryhttps://registry.npmmirror.com 安装好后 cnpm -v 查看淘宝镜像的版本 之后通过淘宝镜像安装脚手…

Spring实战:采用Spring配置文件管理Bean

文章目录 一、Spring框架概述二、实战&#xff1a;采用Spring配置文件管理Bean&#xff08;一&#xff09;创建Jakarta EE项目&#xff08;二&#xff09;添加Spring依赖&#xff08;三&#xff09;创建杀龙任务类&#xff08;四&#xff09;创建勇敢骑士类&#xff08;五&…

显示器接口的了解

显示器视频接口科普&#xff1a;看完就懂HDMI、DP、DVI、VGA、USB-C哪个更适合你的电脑外接显示器_哔哩哔哩_bilibili 电脑显示接口&#xff1a; VGA,DVI,HDMI,DP,USB-C VGA:基本被淘汰了。 常见的还是HDMI1.4和2.0规格 更适合电脑使用的DP接口&#xff08;免费&#xff09;…

开源AI引擎|企业合同管理:自然语言处理与OCR技术深度融合

一、企业应用&#xff1a;合同智能管理 结合NLP和OCR技术&#xff0c;企业可以构建智能化的合同管理系统&#xff0c;实现合同的自动化审查、风险评估和知识抽取。这样的系统不仅能够提高合同处理的效率&#xff0c;还能够降低人为错误&#xff0c;加强风险控制。 例如&#x…

蓝桥杯-网络安全比赛(2)基础学习-正则表达式匹配电话号码、HTTP网址、IP地址、密码校验

正则表达式&#xff08;Regular Expression&#xff09;&#xff1a;定义&#xff1a;一种强大的文本处理工具&#xff0c;用于描述、匹配和查找字符串中的特定模式。应用&#xff1a;密码验证、文本搜索和替换、数据清洗等。特点&#xff1a;通过特定的元字符和规则来构建复杂…

07_Response

文章目录 案例&#xff08;请求分发案例&#xff09; Response响应行响应头响应体特殊响应头refreshContent-typeContent-dispositionlocation 案例&#xff08;登录案例&#xff09; 案例&#xff08;请求分发案例&#xff09; 场景&#xff1a;有多个请求 Http://localhost:…

【检索稳定|火爆征稿中】2024年企业管理与数字化经济国际学术会议(ICBMDE 2024)

【检索稳定|火爆征稿中】2024年企业管理与数字化经济国际学术会议&#xff08;ICBMDE 2024&#xff09; 2024 International Conference on Business Management and Digital Economy&#xff08;ICBMDE 2024&#xff09; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~…

6_相机坐标系_相机4个坐标系详述

相机系列文章是用来记录使用opencv3来完成单目相机和6轴机械臂手眼标定。本人吃饭的主职是linux下6轴机械臂相关应用开发。但对于机械臂运动学、相机应用等都非常感兴趣&#xff0c;所以对一些线性代数基础薄弱又想深入了解机械臂内部运算的同志比较有体会。由于是探索性学习&a…

基于Spring Boot的在线学习系统的设计与实现

基于Spring Boot的在线学习系统的设计与实现 摘 要 在线学习系统是以大学传统线下教学方式不适应信息技术的迅速发展为背景&#xff0c;提高学习效率&#xff0c;解决传统教学问题&#xff0c;并且高效的实现教学信息化的一款软件系统。为了更好的实现对于教学和学生的管理&a…

Dockerfile:自定义镜像

Dockerfile 是一个文本文件&#xff0c;其中包含了一系列用于自动化构建Docker镜像的指令。通过编写Dockerfile&#xff0c;开发者能够明确地定义一个软件应用及其运行环境应该如何被封装进一个可移植、可重复构建的Docker镜像中。 第一步&#xff1a;在/tmp文件下新建docker…

使用itext-core生成PDF

1、添加引用依赖包 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-core</artifactId><version>8.0.3</version><type>pom</type></dependency> 2、上代码 package com.student.demo.pdf;impor…

CUDA版本支持的pytorch版本

PyTorch 1.0.x - 支持 CUDA 7.5 PyTorch 1.1.x - 支持 CUDA 8.0 PyTorch 1.2.x - 支持 CUDA 9.0 PyTorch 1.3.x - 支持 CUDA 9.2 PyTorch 1.4.x - 支持 CUDA 10.1 PyTorch 1.5.x - 支持 CUDA 10.2 PyTorch 1.6.x - 支持 CUDA 11.0 PyTorch 1.7.x - 支持 CUDA 11.0/11.1 PyTorch…

数字身份的革命:解锁 Web3 的身份验证技术

引言 随着数字化时代的到来&#xff0c;个人身份认证成为了日常生活和商业活动中不可或缺的一部分。传统的身份验证方式存在着安全性低、易伪造、不便利等问题&#xff0c;因此&#xff0c;人们迫切需要一种更安全、更便捷的身份验证技术。在这样的背景下&#xff0c;Web3的身…

【C语言】Infiniband驱动init_dev_assign函数

一、注释 一个内核模块的初始化函数&#xff0c;用于分配和初始化某些资源。以下是对代码块的逐行中文注释&#xff1a; // 定义一个初始化设备分配的函数 static void init_dev_assign(void) {int i 1;spin_lock_init(&dev_num_str_lock); // 初始化自旋锁if (mlx4_fil…

超级会员卡积分收银系统源码:积分+收银+商城三合一小程序 带完整的安装代码包以及搭建教程

信息技术的迅猛发展&#xff0c;移动支付和线上购物已经成为现代人生活的常态。在这样的背景下&#xff0c;商家对于能够整合收银、积分管理和在线商城的综合性系统的需求日益强烈。下面&#xff0c;罗峰给大家分享一款超级会员卡积分收银系统源码&#xff0c;它集积分、收银、…

pyecharts操作一

pyecharts 是一个用于生成Echarts图表的Python库。Echarts是百度开源的一个数据可视化JS库&#xff0c;可以生成一些非常酷炫的图表。 环境安装 pip install pyecharts 检查版本 import pyecharts print(pyecharts.version) 2.0.3 柱状图绘制 from pyecharts.charts impor…

通过Jmeter准备压测数据-mysql示例

1、新建线程组 总共30万条数据 2、创建jdbc链接 创建jdbc连接配置 配置mysql连接 需要在jmeter安装的路径\apache-jmeter-5.6.3\lib\ext 目录下添加mysql 驱动 3、创建jdbc请求 jdbc链接名称需要与上一步中的保持一致&#xff0c;同时添加insert语句 例如 INSERT INTO test…

【tingsboard开源平台】下载数据库,IDEA编译,项目登录

一&#xff0c; PostgreSQL 下载 需要看官网的&#xff1a;点此下载直达地址&#xff1a;点此进行相关学习&#xff1a;PostgreSQL 菜鸟教程 二&#xff0c;PostgreSQL 安装 点击安装包进行安装 出现乱码错误&#xff1a; There has been an error. Error running C:\Wind…

macos下 jupyter服务安装和vscode链接密码设置 .ipynb文件

最近收到了一些后缀为.ipynb的文件&#xff0c; 这个文件就是使用jupyter编辑的&#xff0c;于是就需要安装一个jupyter服务&#xff0c; 对于最新版本的jupyter 网上很多的资料都已经过期了&#xff0c;这里以最新版本的jupyter为例。 jupyter lab安装 jupyter 这个工具包含…