• pyautogui实践——10行代码实现《破事精英》里面的“凝固的桌面“


    1、什么是凝固的桌面

    想必看过《破事精英》的朋友一定会对莫菲提及的各种稀奇古怪的软件种草。
    所以看完最后一集后的我,决定把"凝固的桌面"给实现出来。
    这里使用pyautogui来完成操作。

    在这里插入图片描述

    2、pyautogui快捷操作

    一共三步操作

    2.1 返回桌面pyautogui.hotkey('win', 'd')

    pyautogui提供了操作键盘的方法

    按住某个按键pyautogui.keyDown("a")
    松开某个按键pyautogui.keyUp("a")
    按下放开某个按键pyautogui.press("a")
    所以我们可以通过上述的组合去实现多个按键的单独操作。当然,pyautogui还提供了快捷键的连续操作,比如我们以返回桌面的快捷键为例:pyautogui.hotkey('win', 'd')

    2.2 截图桌面

    因为考虑到有的电脑反应较慢,所以在我们执行完成返回桌面的快捷操作,去截图桌面的时候最好sleep 一秒或者两秒。使用pyautogui截图需要依赖Pillow。因此要记得先检查Pillow是否安装。安装完成后就可以调用截图方法了。

    screenshot_name = 'my_screenshot.jpg'
    pyautogui.screenshot(screenshot_name)
    
    • 1
    • 2

    2.3替换桌面

    替换桌面这里需要去修改注册表的值,我们传入我们刚刚截图的绝对路径即可

    import win32api, win32con, win32gui
    def windows_img(paperPath):
        """修改注册表实现桌面壁纸切换"""
        k = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER, 'Control panel\\Desktop', 0, win32con.KEY_ALL_ACCESS)
        win32api.RegSetValueEx(k, 'Wallpaper', 0, win32con.REG_SZ, '2')
        win32api.RegSetValueEx(k, 'TileWallpaper', 0, win32con.REG_SZ, '0')
        win32api.RegCloseKey(k)
        win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, paperPath, win32con.SPIF_SENDWININICHANGE)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.4隐藏桌面图标Plan A

    第一种我们可以通过执行快捷键 shift+f10+v+d去执行桌面图标隐藏。
    pyautogui.hotkey("shift", "f10", "v", "d")
    需要注意的是这个快捷键第一次执行后会将图片隐藏,第二次执行就显示出来了。所以我们需要记得否桌面是否"凝固"进行判定。这里就简单地通过截图是否存在来判定即可。

    2.5隐藏桌面图标Plan B

    当然,我们还有一种方法是去在桌面中创建一个文件夹,然后将所有图标移动进去后隐藏

    
    def create_hide(dirname="hide"):
        username = getpass.getuser()
        desktop_path = f'C:\\Users\\{username}\\Desktop'
        new_dir = os.path.join(desktop_path,dirname)
        if not os.path.exists(new_dir):
            os.makedirs(new_dir)
        for icon in os.listdir(desktop_path):
            try:
                current_path = os.path.join(desktop_path,icon)
                target_path = os.path.join(new_dir,icon)
                shutil.move(current_path,target_path)
            except Exception:
                print("%s移动失败,请检查文件是否已打开或者是文件夹"%icon)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3、完整源码

    完整代码如下,效果非常“凝固”

    import os
    import time
    import pyautogui
    import getpass
    import shutil
    import win32api, win32con, win32gui
    
    
    def windows_img(paperPath):
        """修改注册表实现桌面壁纸切换"""
        k = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER, 'Control panel\\Desktop', 0, win32con.KEY_ALL_ACCESS)
        win32api.RegSetValueEx(k, 'Wallpaper', 0, win32con.REG_SZ, '2')
        win32api.RegSetValueEx(k, 'TileWallpaper', 0, win32con.REG_SZ, '0')
        win32api.RegCloseKey(k)
        win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, paperPath, win32con.SPIF_SENDWININICHANGE)
    
    
    def create_hide(dirname="hide"):
        """创建文件夹移动图标后隐藏桌面"""
        username = getpass.getuser()
        desktop_path = f'C:\\Users\\{username}\\Desktop'
        new_dir = os.path.join(desktop_path,dirname)
        if not os.path.exists(new_dir):
            os.makedirs(new_dir)
        for icon in os.listdir(desktop_path):
            try:
                current_path = os.path.join(desktop_path,icon)
                target_path = os.path.join(new_dir,icon)
                shutil.copy(current_path,target_path)
            except Exception:
                print("%s移动失败,请检查文件是否已打开或者是文件夹"%icon)
    
    
    if __name__ == '__main__':
        pyautogui.FAILSAFE = False
        pyautogui.hotkey('win', 'd')
        time.sleep(1.5)
        screenshot_name = 'my_screenshot.jpg'
        img_path = os.path.abspath(screenshot_name)
        if not os.path.exists(img_path):
            pyautogui.screenshot(screenshot_name)
            windows_img(img_path)
            # planB隐藏需要打开底下这层注释
            #create_hide()
            pyautogui.hotkey("shift", "f10", "v", "d")  # 隐藏桌面图标快捷键
            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    更多代码可以关注wx公众号"一颗程序树"获取

  • 相关阅读:
    微信小程序实现同一页面左右滑动无限切换上/下一页结合后端请求数据,带滑动动画
    Spring Bean的生命周期
    FPGA_探针(ISSP)调试工具
    交换机和路由器技术-19-HSRP和PVSTP综合实验
    【TcaplusDB知识库】TcaplusDB-tcaplusadmin工具介绍
    Flink之转换算子Transformation
    介绍Phi-3:微软重新定义小型语言模型(SLM)的可能性
    [动态规划] 0-1背包问题和完全背包问题
    VINS学习(一)视觉前端
    【无标题】
  • 原文地址:https://blog.csdn.net/Demonslzh/article/details/126182521