当前位置: 首页 > news >正文

有没有电脑做兼职的网站吗东莞网站制作十年乐云seo

有没有电脑做兼职的网站吗,东莞网站制作十年乐云seo,微信手机网页版登录入口官网,网站建设后台 手工上传文章目录 前言效果展示为什么要做他如何实现他实现步骤获取桌面句柄代码获取桌面句柄libvlc_media_player_set_hwnd函数 动态壁纸代码 总结 前言 在当今的数字世界中,个性化和自定义化的体验越来越受到人们的欢迎。动态壁纸是其中一种很受欢迎的方式,它…

文章目录

  • 前言
    • 效果展示
    • 为什么要做他
    • 如何实现他
    • 实现步骤
      • 获取桌面句柄
      • 代码获取桌面句柄
      • libvlc_media_player_set_hwnd函数
    • 动态壁纸代码
  • 总结


前言

在当今的数字世界中,个性化和自定义化的体验越来越受到人们的欢迎。动态壁纸是其中一种很受欢迎的方式,它不仅可以美化桌面,还能带来生动的视觉体验。利用开源的 VLC 媒体播放器库(libVLC)和 C++,我们可以轻松地创建一个独特的动态壁纸程序,将视频内容直接嵌入到 Windows 的桌面背景中。本篇文章将带你一步步实现这个目标,通过使用 libVLC 的强大功能,将视频作为动态壁纸展示在你的桌面上。


效果展示

在这里插入图片描述

为什么要做他

  1. 用来训练我们使用VLC播放的能力
  2. 我们可以自定义壁纸(虽然wallpaper engine也可以实现这个能力,但是需要购买难免是比较心疼的)

如何实现他

在Windows里面,我们的壁纸其实就和一个窗口差不多,他也有句柄,我们得到他的句柄,然后把视频贴上去就OK了
在VLC中,我们可以使用libvlc_media_player_set_hwnd这个函数把播放的视频贴到一个指定的句柄上
那么我们的目标很明确了:

  1. 获取句柄
  2. 把视频贴上去

实现步骤

获取桌面句柄

在 Windows 系统中,桌面其实是由几个不同的部分组成的。这些部分就像树枝一样,一层一层地构成了整个桌面。

  1. 父窗口:这是整个桌面的基础,它就像树干一样,支撑着其他部分。这个父窗口在 Windows 中叫做 “Program Manager”(Progman)。

  2. 背景:这是你在桌面上看到的图片或颜色,是桌面的底层部分,就像树的枝叶一样覆盖在整个桌面上。

  3. 图标:这些是你桌面上看到的各种文件、文件夹和应用程序的快捷方式,它们显示在背景之上。

在 Windows 系统中,“Program Manager” 包含了一个叫做 “SysListView32” 的窗口,这个窗口专门用来显示桌面上的图标。

如果你能把自己(比如说一个应用程序或窗口)设置在 “Program Manager” 的这个 “SysListView32” 窗口后面,那么你的窗口就会出现在桌面图标的后面,就好像你躲在树叶后面一样。

所以,整个意思是:桌面是由父窗口、背景和图标这三部分组成的,而通过设置父窗口(Program Manager),你可以控制自己窗口的显示位置,从而把它放在桌面图标的后面。

代码获取桌面句柄

我们使用的是Windows的API你先要包含windows.h

HWND FindDTWindow()
{// 找到名为 "Progman" 的顶级窗口句柄,它的窗口标题是 "Program Manager"HWND hWnd = ::FindWindow(L"Progman", L"Program Manager");// 发送一个特殊的消息 (0x052C) 给找到的 "Progman" 窗口// 这条消息会使 Windows 创建一个新的 WorkerW 窗口DWORD_PTR dResult = 0;SendMessageTimeout(hWnd, 0x052C, 0, NULL, SMTO_NORMAL, 1000, &dResult);// 声明一个变量来存储 WorkerW 窗口的句柄HWND hwndWorkW = NULL;// 使用一个 do-while 循环来查找 WorkerW 窗口do {// 查找下一个 WorkerW 窗口hwndWorkW = ::FindWindowEx(NULL, hwndWorkW, L"WorkerW", NULL);if (NULL == hwndWorkW)continue;// 在 WorkerW 窗口中查找 SHELLDLL_DefView 窗口HWND hView = ::FindWindowEx(hwndWorkW, NULL, L"SHELLDLL_DefView", NULL);if (NULL == hView)continue;// 如果找到了 SHELLDLL_DefView 窗口,则尝试关闭多余的 WorkerW 窗口HWND h = ::FindWindowEx(NULL, hwndWorkW, L"WorkerW", NULL);while (NULL != h) {SendMessage(h, WM_CLOSE, 0, 0);h = ::FindWindowEx(NULL, hwndWorkW, L"WorkerW", NULL);}break;} while (true);// 返回 "Progman" 窗口的句柄return hWnd;
}

libvlc_media_player_set_hwnd函数

libvlc_media_player_set_hwnd 是 libVLC 库中的一个函数,用于设置视频输出窗口的句柄 (HWND)。这是在 Windows 平台上使用 libVLC 播放视频时常用的函数。

void libvlc_media_player_set_hwnd(libvlc_media_player_t *p_mi, void *drawable);

函数作用:

这个函数的主要作用是将视频输出重定向到指定的窗口。换句话说,当你使用 libVLC 播放视频时,可以指定一个窗口,让视频显示在该窗口中。

参数和含义:

  • libvlc_media_player_t *p_mi:这是一个指向 libVLC 媒体播放器实例的指针。你需要先创建一个媒体播放器实例,然后将它的指针传递给这个函数。

  • void *drawable:这是一个指向窗口句柄 (HWND) 的指针。在 Windows 平台上,这个句柄指向你希望视频输出的窗口。

动态壁纸代码

#include <iostream>// 避免 ssize_t 引发的错误
#if defined(_MSC_VER)
#include <basetsd.h>
typedef SSIZE_T ssize_t;
#endif#include <vlc/vlc.h>
#include <thread>
#include <Windows.h>using namespace std;HWND FindDTWindow()
{HWND hWnd = ::FindWindow(L"Progman", L"Program Manager");DWORD_PTR dResult = 0;SendMessageTimeout(hWnd, 0x052C, 0, NULL, SMTO_NORMAL, 1000, &dResult);HWND hwndWorkW = NULL;do {hwndWorkW = ::FindWindowEx(NULL, hwndWorkW, L"WorkerW", NULL);if (NULL == hwndWorkW)continue;HWND hView = ::FindWindowEx(hwndWorkW, NULL, L"SHELLDLL_DefView", NULL);if (NULL == hView)continue;HWND h = ::FindWindowEx(NULL, hwndWorkW, L"WorkerW", NULL);while (NULL != h) {SendMessage(h, WM_CLOSE, 0, 0);h = ::FindWindowEx(NULL, hwndWorkW, L"WorkerW", NULL);}break;} while (true);return hWnd;
}// 等待播放结束(完整播放)
void waitPlaying(libvlc_media_player_t* mp)
{libvlc_state_t state;do {state = libvlc_media_player_get_state(mp);} while (state != libvlc_Error && state != libvlc_Ended);
}void playerMedia(const char* path)
{libvlc_instance_t* vlc = libvlc_new(0, NULL);libvlc_media_t* md = libvlc_media_new_path(vlc, path);//libvlc_media_new_location(vlc, path);libvlc_media_player_t* mp = libvlc_media_player_new_from_media(md);libvlc_media_player_set_media(mp, md);HWND hWnd = FindDTWindow();// 设置句柄libvlc_media_player_set_hwnd(mp, hWnd);// 开始播放libvlc_media_player_play(mp);// 等待播放结束waitPlaying(mp);// 释放资源libvlc_media_release(md);libvlc_media_player_release(mp);libvlc_release(vlc);
}int main()
{playerMedia("./a5.mp4"); //RTSP、HTTP ...;return 0;
}

总结

通过本文的讲解,我们成功地利用 C++ 和 libVLC 创建了一个独特的动态壁纸程序。这个程序不仅能美化你的桌面,还能为你带来全新的视觉享受。libVLC 提供了强大的多媒体处理能力,而 C++ 的灵活性则使我们能够充分利用这些功能,实现高度自定义的应用程序。希望通过本文,你不仅学会了如何使用 libVLC 和 C++ 创建动态壁纸,还能激发更多关于个性化桌面体验的创意和想法。让你的桌面更加生动,展示属于你的独特风格。

http://www.wooajung.com/news/32843.html

相关文章:

  • php成品网站seo搜索规则
  • 广州专业的网站建设公司百度导航2023年最新版
  • 弹窗网站制作自己建网站流程
  • 网站首页作用淘宝运营培训课程免费
  • 做网站编辑心得pc网站建设和推广
  • 推销网站建设具备哪些知识什么是seo搜索引擎优化
  • 安徽新站优化德州seo优化
  • 专业网站建设微信网站定制网站免费推广网站
  • 做互联网小程序 和网站有没有前景百度联盟官网登录入口
  • 郑州房产信息网官网网络seo培训
  • 网站建设需要什么技术关键词搜索查找工具
  • 网站建设公司的市场营销方案windows清理优化大师
  • 本科自考难吗网站seo搜索
  • 公司网站怎么在百度上做推广谷歌关键词热度查询
  • 漂亮的手机网站模板推广公司简介
  • 百度云可以做网站吗电子商务营销策划方案
  • 大英县住房和城乡建设局网站网络营销外包
  • 大型网站频道的建设需多人协同开发链接网
  • 懒人学做网站网站设计方案模板
  • 辽宁省工程造价信息今日头条搜索优化怎么做
  • 网站图片翻页效果如何做网络营销模式
  • 利用小偷程序做网站域名查询大全
  • SOHO香港公司网站怎么做跨境电商平台哪个最好最可靠
  • 微网站二级页面怎么做网页关键词优化软件
  • 山东省建设教育信息网站首页数字营销公司
  • 什么是电商运营具体指什么seo免费优化网址软件
  • 怎样建设一个自己的网站首页网站推广计划书
  • 比较好的WordPress中文主题湖北搜索引擎优化
  • 视频类网站建设的成果搜狗网站排名软件
  • 网站开发后端用java叫什么网络优化公司哪家好