开发环境


     Vs2017、Python3

     注意,python调用了win32api,所以需要执行安装命令:pip install pywin32


代码1

     此方式,利用winAPI可以完成。

import win32api, win32gui, win32api, win32con
import time#import cv2
def setWallPaper(pic):# open registerprint(pic)regKey = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,"Control Panel\\Desktop",0,win32con.KEY_SET_VALUE)win32api.RegSetValueEx(regKey,"WallpaperStyle", 0, win32con.REG_SZ, "2")win32api.RegSetValueEx(regKey, "TileWallpaper", 0, win32con.REG_SZ, "0")# refresh screenwin32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER,pic, 1+2)if __name__=='__main__':pic="C:/Users/Administrator/Desktop/bmp.bmp" #写绝对路径setWallPaper(pic)#img = cv2.imread(pic) #cv2.imshow("Image", img)
代码2

     此方式,利用查找桌面句柄、+SDL可以完成。

     备注:若spyxx查找出的桌面句柄为Progman的话需要按win+tab切换到WorkerW模式下才能正常找到桌面句柄,

##2022-01-07~~~~~动态桌面
##################by Ljj
##程序必须用win+tad使能系统的workerw中间层控件模式
##中间意外退出,二次运行sdlRenderer会使能失效,是因为没有很好的退出,二次运行就可以
##如果打开VC的软件跑一次,二次运行sdlRenderer则不会出错,很奇怪,未解之谜,但是我认为是SDL的底层冲突
##~~~~~~2天,还是卡卡顿顿的,底层图像渲染与播放五日#-*- coding: utf-8 -*-  ##设置编码方式import win32gui, win32api, win32con
import os,cv2,time
import sdl2.extdef setWallPaper(pic):#通过修改注册表,进行背景设置# open registerprint(pic)#取得注册表的要修改内容,路径所在文件夹的句柄regKey = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,"Control Panel\\Desktop",0,win32con.KEY_SET_VALUE)# 设置背景的参数,剧中,平铺win32api.RegSetValueEx(regKey,"WallpaperStyle", 0, win32con.REG_SZ, "2")win32api.RegSetValueEx(regKey, "TileWallpaper", 0, win32con.REG_SZ, "0")# refresh screen,更新背景,1秒钟更新大约2-4次,很卡顿,极限了,而且必须有路径才可以win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER,pic, 1+2)class FindWindowsPro:#找刷新窗口的句柄# window10以上,再操作控件,底层壁纸之间,回家一个过渡层,这个窗口再底层壁纸和空间之间,修改这个窗口#如果没有这个窗口,渲染器会把壁纸与控件渲染在一个串口上,所以通过win+tab,操作桌面,使得他生成这个过渡层#部分系统一直都有,我的没有,很伤心>_<def __init__(self):#初始类内部的全局句柄,传递所有的窗口self.hwnd_SHELLDLL_DefView = int()def FindWindowsTop(self):#找到所有的WorkerW,看看是不是桌面,通过查找下面有没有控件子类来确定,如果有,找到子类之后的WorkerW#控件后的WorkerW就是可以修改的过渡层,比枚举方法好,是只找WorkerW进行判断,复杂度是nwin = win32gui.FindWindowEx(None,None,'WorkerW',None)while True:if win:tid = win32gui.FindWindowEx(win,None,'SHELLDLL_DefView',None)if tid:topwin = win32gui.FindWindowEx(None,win,'WorkerW',None)self.hwnd_SHELLDLL_DefView = topwinreturn topwinelse:win= win32gui.FindWindowEx(None,win,'WorkerW',None)else:breakclass SDL_Windowsdeal:#SDL对中间窗口进行图像刷新与播放#初始化,创建这个句柄的窗口(覆盖替换原来的窗口),读入图片转换表面格式,创建渲染器def __init__(self,HWND):#sdl2.ext.init()self.HWND=HWND#self.RESOURCES = sdl2.ext.Resources(__file__, "resources")#self.window = sdl2.ext.Window("Hello World!", size=(1920, 1080))if sdl2.SDL_Init(sdl2.SDL_INIT_EVERYTHING) == -1: returnif sdl2.sdlimage.IMG_Init(sdl2.sdlimage.IMG_INIT_PNG) == 0: return#sdlWindow = sdl2.SDL_CreateWindow(b"Hello World", 0,0,1920,1080,0)self.ImgSurface = sdl2.sdlimage.IMG_Load(b"./AAA.bmp")if not self.ImgSurface: returnself.sdlWindow = sdl2.SDL_CreateWindowFrom(self.HWND)if not self.sdlWindow: returnself.sdlRenderer = sdl2.SDL_CreateRenderer(self.sdlWindow, -1, sdl2.SDL_RENDERER_ACCELERATED)if not self.sdlRenderer: returndef ShowWindow(self):#窗口刷新,讲每个图片,创建新的纹理,将纹理叠加到渲染器上,这个程序不满意,因为每次都要创建纹理,待改进#渲染器要先删除老的,再用纹理叠加一个空的渲染器,才可以更连续的播放图片,所以这部分只要有一个空的渲染器就可以#这部分可以用三种方法:1,SDL视频处理,Surface操作进行播放;2,将图像转换为纹理(sdlimage),更新纹理;#3.读取图片,Surface操作进行播放;# 第一种可以配合更好的音频,但是涉及更深入的视频音频操作self.ImgSurface = sdl2.sdlimage.IMG_Load(b"./AAA.bmp")if not self.ImgSurface: returnself.sdlTexture = sdl2.SDL_CreateTextureFromSurface(self.sdlRenderer, self.ImgSurface)sdl2.SDL_RenderClear(self.sdlRenderer)if sdl2.SDL_RenderCopy(self.sdlRenderer, self.sdlTexture, None, None) != 0: returnsdl2.SDL_RenderPresent(self.sdlRenderer)#print(self.HWND)sdl2.SDL_FreeSurface(self.ImgSurface)sdl2.SDL_DestroyTexture(self.sdlTexture)def CloseWindow(self):#两个不能删掉,一个是SDL_Quit,一个是SDL_DestroyWindow,删掉之后,不能对中间层窗口进行在此操作,#VC的跑一次,就又可以了,我认为SDL_DestroyWindow删掉了那个窗口,然后就不存在了,后面没办法操作了#VC寻找方式不同,是找父类,而py只能找子类,差异很大print("视频播放完成!")sdl2.SDL_DestroyTexture(self.sdlTexture)#sdl2.SDL_DestroyRenderer(self.sdlRenderer)#sdl2.SDL_DestroyWindow(self.sdlWindow)sdl2.SDL_FreeSurface(self.ImgSurface)sdl2.sdlimage.IMG_Quit()#sdl2.SDL_Quit()if __name__=='__main__':#不能删掉explorer,因为中间窗口就会消失,只能通过再次的wim+tab激活,但是这个不人性,程序需要太多人工介入#os.system('taskkill /f /im explorer.exe')#os.system("start explorer")# 按下ctrl,本来想做一个按键激活,但是系统没有winkey的键值,所以不能虚拟键盘操作,放弃#win32api.keybd_event(0x11, 0, 0, 0)#win32api.keybd_event(0x53, 0, win32con.KEYEVENTF_KEYUP, 0)FindTopWindow = FindWindowsPro()FindTopWindow.FindWindowsTop()#print(FindTopWindow.hwnd_SHELLDLL_DefView)#cap = cv2.VideoCapture("C:/Users/Administrator/Desktop/你的名字.flv")cap = cv2.VideoCapture("./flv.flv")pic = "./AAA.bmp" #写绝对路径#SDL_Window = SDL_Windowsdeal(FindTopWindow.hwnd_SHELLDLL_DefView)if FindTopWindow.hwnd_SHELLDLL_DefView:SDLWindeal = SDL_Windowsdeal(FindTopWindow.hwnd_SHELLDLL_DefView)while cap.isOpened():ret, frame = cap.read()if ret:cv2.imwrite(pic, frame)SDLWindeal.ShowWindow()time.sleep(0.040)else:print("视频播放完成!")break#os.system("Sleep(500)")# 3.释放资源cap.release()cv2.destroyAllWindows()SDLWindeal.CloseWindow()else:print("窗体结构不对!")

关注

笔者 - jxd

微信公众号搜索 “码农总动员” 或 微信扫描下方二维码,了解更多你不知道的XX,O(∩_∩)O

Python —— 修改桌面壁纸相关推荐

  1. python修改桌面壁纸_python实现桌面壁纸切换功能

    本文实例为大家分享了python实现桌面壁纸切换功能的具体实现方法,供大家参考,具体内容如下 大体分为两个部分 一.利用爬虫爬取壁纸 第一部分爬取图片url地址并且下载至本地 爬虫针对http://i ...

  2. python修改桌面壁纸_Python设置每日更新windows壁纸

    不知道大家是否对每日一成不变的壁纸感到厌倦呢?反正对于我个人来说,如果每天打开电脑映入眼帘的都是不同的画面,那么科研热情都会被充分激发,从而提高自己的劳动生产力. 原来使用的是Deepin系统,自己写 ...

  3. python修改桌面壁纸_3分钟教你用python把你的桌面壁纸变得酷起来

    一 .前言 最近在windows商店看到一个很好玩的应用,他能每天自动爬取bing搜索的图片设置为你的桌面壁纸,每天都能自动下载bing图片设置为桌面壁纸,可惜只有付费才能自动更换壁纸.下面让我们一起 ...

  4. python修改桌面壁纸_python定时更换桌面壁纸

    介绍 python基于selenium2中的webdriver以及pywin32模块,定时从指定网站随机下载壁纸,然后更新桌面壁纸的实现. 代码 首先定义一个基于selenium的webdriver的 ...

  5. python修改桌面壁纸_利用Python对windows桌面自动更换壁纸

    根据时间星期几判断用哪张壁纸 # !/usr/bin/env python3 # -*- coding:utf-8 -*- import requests # import pywintypes im ...

  6. python修改桌面壁纸_python设置windows桌面壁纸

    #!/usr/bin/env python # -*- coding: UTF-8 -*- #----------------------------------------------------- ...

  7. python修改桌面壁纸_python设置windows桌面壁纸的实现代码

    #!/usr/bin/env python # -*- coding: UTF-8 -*- #----------------------------------------------------- ...

  8. python修改电脑桌面壁纸_python实现桌面壁纸切换功能

    本文实例为大家分享了python实现桌面壁纸切换功能的具体实现方法,供大家参考,具体内容如下 大体分为两个部分 一.利用爬虫爬取壁纸 第一部分爬取图片url地址并且下载至本地 爬虫针对http://i ...

  9. Python实现桌面壁纸设置

    Python实现桌面壁纸设置 思路 1.通过bing每日壁纸接口,获取图片地址 2.保存图片到绝对路径 3.设置该图片为壁纸 4.批处理壁纸自动切换 第一.获取图片地址 微软bing每日壁纸API接口 ...

  10. python 更换桌面壁纸 播放音乐

    python 改桌面壁纸 播放音乐 - win10可用. 注意: 1)打开 想关闭 直接关机 或者等自动关机 ,本程序无害,由python3编写并由 pyinstaller 打包 2)会在 c盘创建个 ...

最新文章

  1. 浅尝key-value数据库(三)——MongoDB的分布式
  2. android ios 7 双环,安卓机泪奔 库克嘲笑Android 7安装率不及iOS 10零头
  3. 性别分析--微信数据分析(一)
  4. 广告行业一些常用物料的尺寸
  5. 夸克、QQ浏览器、简单搜索竞品分析报告
  6. Unknown column 'password_lifetime' in 'field list';创建数据库时创建用户,修改用户时报错
  7. [SDOI2017]遗忘的集合
  8. 多态——面向接口编程
  9. plc 上位机编译算法_什么是PLC与DDC PLC与DDC的区别
  10. python-study-09
  11. android 蓝光过滤,蓝光过滤app最新版
  12. JavaScript 进阶知识 - 特效篇(一)
  13. Python 解压压缩包至文件夹、把整个文件夹打包至压缩包
  14. 大数据基础教程丨TiDB数据库从入门到实践
  15. GPRS 中的PDP上下文名词解释
  16. 计算机毕业设计题目100例
  17. 我写CSS的常用套路(附demo的效果实现与源码)
  18. [原创]也谈WINDOWS下分区类型变为RAW
  19. PhpStorm配置Vue
  20. Windows下NTFS连接点管理工具-junction工具说明

热门文章

  1. Linux下安装flash player插件
  2. 因子分析累计贡献率_spss教程:因子分析
  3. 如何使用水经注下载地图
  4. 二维条码 PDF417 zxing-cpp解码详细过程
  5. CENTOS安装XXNET
  6. 乌班图 修改ip_unbuntu(乌班图)虚拟机修改ip地址NAT模式
  7. ssh密码长度漏洞java_CVE-2016-2183,CNNVD-201608-448|DES和Triple DES密码算法信息泄露漏洞 - 信息安全漏洞门户 VULHUB...
  8. 英语不好,学编程太困难?或许用文言文来编程你就更加容易上手了!
  9. 三菱plc pwm指令_三菱PLC必会编程指令汇总,收藏这些就够了!
  10. 「45课时热泵仿真」Excel热泵系统热力计算与仿真全课程