懒人壁纸工具

代码主要参考懒人壁纸工具,完全不占内存。会功成身退的壁纸工具(出处: 吾爱破解论坛)如下图。
在这里插入图片描述

写这个的原因同上图(就是在原博主的代码上进行了一些修改)。

原代码

import os
import requests
import ctypes
import json
import configparser
import shutil
from datetime import date
 
def download_image(url, save_path):
    try:
        response = requests.get(url)
        response.raise_for_status()
 
        with open(save_path, 'wb') as file:
            file.write(response.content)
 
        print("图片下载成功!")
    except requests.HTTPError as e:
        print(f"图片下载失败:{e}")
 
def set_wallpaper(image_path):
    # 设置桌面背景
    SPI_SETDESKWALLPAPER = 0x0014
    ctypes.windll.user32.SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, image_path, 3)
    print("桌面背景设置成功!")
 
# 读取配置文件
config = configparser.ConfigParser()
config.read('set.ini')
path = config.get('Settings', 'path')
boot = config.get('Settings', 'boot')
 
# 解析链接获取图片地址
url = "https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN"
response = requests.get(url)
data = response.json()
image_url = "https://cn.bing.com" + data['images'][0]['url']
 
# 图片保存目录
save_dir = path
# 获取今天的日期,并构建图片保存文件名
today = date.today()
save_file_name = today.strftime("%Y%m%d") + ".jpg"
# 图片保存路径和文件名
save_file_path = os.path.join(save_dir, save_file_name)
 
# 检查保存目录是否存在,如果不存在则新建目录
if not os.path.exists(save_dir):
    os.makedirs(save_dir)
 
# 下载图片
download_image(image_url, save_file_path)
 
# 设置桌面背景
set_wallpaper(save_file_path)
 
# 判断是否添加到计算机启动项
current_path = os.getcwd()
shortcut_path = os.path.join(os.environ["APPDATA"], "Microsoft", "Windows", "Start Menu", "Programs", "Startup", "WallpaperChanger.lnk")
 
if boot.lower() == "yes":  # 添加到计算机启动项
    shutil.copyfile(os.path.join(current_path, "WallpaperChanger.lnk"), shortcut_path)
    print("已添加到计算机启动项")
elif boot.lower() == "no":  # 从计算机启动项移除
    if os.path.exists(shortcut_path):
        os.remove(shortcut_path)
        print("已从计算机启动项移除")
else:
    print("boot值非法,无法处理")
 
# 关闭程序
exit()

修改代码

import os
import requests
import ctypes
import configparser
from datetime import date, datetime, timedelta
import sys
import win32com.client


def log(string: str):
    print(datetime.now().strftime("[%Y-%m-%d %H:%M:%S.%f]") + '\t' + string)


def download_image(image_url, save_path):
    try:
        response = requests.get(image_url)
        response.raise_for_status()

        with open(save_path, 'wb') as file:
            file.write(response.content)

        log("图片下载成功!")
    except requests.HTTPError as e:
        log(f"图片下载失败:{e}")


def set_wallpaper(image_path):
    # 设置桌面背景
    spi_set_desk_wallpaper = 0x0014
    ctypes.windll.user32.SystemParametersInfoW(spi_set_desk_wallpaper, 0, image_path, 3)
    log("桌面背景设置成功!")


def main():
    # 读取配置文件
    config = configparser.ConfigParser()
    config.read('set.ini')
    path = config.get('Settings', 'path')
    boot = config.get('Settings', 'boot')
    log_path = config.get('Settings', 'log_path')
    log_restore = config.getint('Settings', 'log_restore')
    # 日志处理
    if not os.path.exists(log_path):
        os.makedirs(log_path)
    else:
        if log_restore <= 0:
            log_restore = 3
        past_time = datetime.now() - timedelta(days=log_restore)
        for file_name in os.listdir(log_path):
            # 日志文件名符合log_%Y%m%d.txt
            # 解析文件名中的日期部分
            date_str = file_name.split("_")[1].split(".")[0]
            file_date = datetime.strptime(date_str, "%Y%m%d")
            # 删除过期文件
            if file_date < past_time:
                os.remove(os.path.join(log_path, file_name))

    with open(os.path.join(log_path, 'log_' + date.today().strftime("%Y%m%d") + '.txt'), 'a',
              encoding='utf-8') as log_file:
        sys.stdout = log_file
        sys.stderr = log_file

        log('----------------Start----------------')

        # 图片保存目录
        save_dir = path
        # 检查保存目录是否存在,如果不存在则新建目录
        if not os.path.exists(save_dir):
            os.makedirs(save_dir)
        # 获取今天的日期,并构建图片保存文件名
        save_file_name = date.today().strftime("%Y%m%d") + ".jpg"
        # 图片保存路径和文件名
        save_file_path = os.path.join(save_dir, save_file_name)

        if not os.path.exists(save_file_path):
            # 解析链接获取图片地址
            url = "https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN"
            response = requests.get(url)
            data = response.json()
            image_url = "https://cn.bing.com" + data['images'][0]['url']
            # 下载图片
            download_image(image_url, save_file_path)
        else:
            log('文件已存在')

        # 设置桌面背景
        set_wallpaper(save_file_path)

        # 判断是否添加到计算机启动项
        shortcut_path = os.path.join(os.environ["APPDATA"], "Microsoft", "Windows", "Start Menu", "Programs", "Startup",
                                     "WallpaperChanger.lnk")

        if boot.lower() == "yes":  # 添加到计算机启动项
            if not os.path.exists(shortcut_path):
                # 创建快捷方式到启动项
                shell = win32com.client.Dispatch("WScript.Shell")
                shortcut = shell.CreateShortcut(shortcut_path)
                shortcut.TargetPath = os.path.join(os.getcwd(), 'WallpaperChanger.exe')
                shortcut.WorkingDirectory = os.getcwd()
                shortcut.Save()
                log("添加到计算机启动项")
            else:
                log("启动项已存在")
        elif boot.lower() == "no":  # 从计算机启动项移除
            if os.path.exists(shortcut_path):
                os.remove(shortcut_path)
                log("已从计算机启动项移除")
            else:
                log("启动项不存在,无需删除")
        else:
            log("boot值非法,无法处理")

        log('-----------------End-----------------\n')
        sys.stdout = sys.__stdout__
        sys.stderr = sys.__stderr__
    # 关闭程序
    sys.exit()


if __name__ == '__main__':
    main()

编译及使用

使用python3.9版本(3.8也行,不要用3.11版本,conda下载的pyinstaller不知道有什么问题,打包成的exe一运行就报错。其他版本没测试过)
使用 pyinstaller -F -w -n WallpaperChanger main.py编译打包,生成执行文件WallpaperChanger .exe

在运行时,需要在WallpaperChanger .exe同级目录下新建配置文件set.ini
其中配置示例如下:

[Settings]
path = D:\Pictures
boot = yes
log_path = .\log
log_restore = 7

其中

  • path为图像保存的位置
  • boot表示是否添加到启动项,yes为添加到启动项no为从启动项删除,大小写不限
  • log_path为日志文件的位置
  • log_restore 为日志保存时间,单位为天,若填写小于等于0的数,默认为3

改动

  • 原代码每次启动都会做出所有操作,下载图片、设置壁纸、添加启动项。修改后不然,只有当日图片未下载才会下载,只有启动项中没有才会添加启动项。
  • 原代码会显示控制台,并将一些信息打印出来,这其实很丑。编译时使用 -w 参数即可。
  • 使用日志文件,将运行信息打印到日志文件中。
  • 自定义日志文件保存天数(其实就是,每次运行会把不需要继续保存的文件删掉)。
  • 原代码需要自己新建快捷方式,并将名字改为"WallpaperChanger.lnk",现在这一步完全自动化。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MapGIS转shp懒人工具是一款方便快捷的软件工具。它能将MapGIS软件中的地理数据转换为shp文件格式,使其能够与其他GIS软件兼容。 这个工具简化了传统的转换流程,让用户能够通过简单的几个步骤完成转换。用户只需要打开MapGIS软件,选择想要转换的地理数据,然后点击转换按钮即可。转换完成后,用户可以选择保存转换后的shp文件到指定位置。 这个懒人工具的使用非常方便,不需要用户具备专业的GIS知识。它提供了直观的用户界面和简洁的操作流程,让初学者或非专业人士也能够轻松上手。 此外,这个工具还具有一些其他功能,比如数据过滤和字段选择。用户可以在转换前对数据进行筛选,只转换需要的数据。同时,用户还可以选择转换后的shp文件中所包含的字段,以满足不同的需求。 总的来说,MapGIS转shp懒人工具是一个简单实用的工具,能够帮助用户快速将MapGIS中的地理数据转换为shp格式,提高工作效率,节省时间。无论是专业人士还是新手,都可以轻松使用它来完成地理数据转换的任务。 ### 回答2: MapGIS转SHP懒人工具是一种简化了地图数据格式转换过程的工具。MapGIS是一款功能强大的地理信息系统软件,而SHP是一种常用的地图数据格式,两者之间的转换过程通常需要一定的专业知识和操作技巧。 这个懒人工具的作用就是简化了MapGIS转SHP的繁琐操作,使得非专业人员也能够轻松地完成这个转换过程。使用这个工具,只需要简单的几个步骤,就能够将MapGIS的地图数据转换为SHP格式,方便在其他地图软件中使用。 首先,用户只需要选择需要转换的地图数据文件或图层,然后选择输出的SHP文件的路径和名称。接下来,工具会自动识别选择的地图数据的类型和属性,并进行相应的转换操作。最后,用户只需要等待一段时间,就能够得到转换完成的SHP文件。 这个工具的好处是简单易用,不需要用户具备专业的地理信息系统知识。它能够帮助用户节省时间和精力,提高工作效率。同时,它还能够保证转换结果的准确性和可靠性,确保转换后的SHP文件可以在其他地图软件中正确地显示和使用。 总的来说,MapGIS转SHP懒人工具是一款方便实用的工具,适用于不具备专业地理信息系统知识的用户,帮助他们快速、准确地完成地图数据格式的转换工作。 ### 回答3: MapGIS转SHP懒人工具(MapGIS to SHP Converter)是一款可以简化空间数据转换过程的工具软件。它提供了一种快速、易用且高效的方式,将MapGIS地理信息系统中的数据转换为SHP文件格式。无论是专业GIS人员还是普通用户,都可以通过该工具轻松地完成MapGIS数据到SHP文件的转换。 MapGIS转SHP懒人工具具有以下特点和优势: 1. 简单易用:该工具的操作界面简洁直观,无需复杂的操作步骤,即可快速完成转换任务。即使对GIS软件不熟悉的用户也可以轻松上手。 2. 高效快速:MapGIS转SHP懒人工具采用了高效的转换算法,能够在短时间内将大规模的空间数据转换为SHP格式,大大提高了转换效率。 3. 支持多种数据格式:该工具不仅支持MapGIS的常见数据格式,还能够转换其他常见的空间数据格式,如DXF、DWG、KML等,满足了用户的多样化需求。 4. 数据处理功能:除了基本的数据转换功能,MapGIS转SHP懒人工具还提供了丰富的数据处理功能,如属性字段的筛选、数据剪裁、坐标系统的转换等,能够满足用户对数据处理的需求。 总之,MapGIS转SHP懒人工具是一款简单易用、高效快速的空间数据转换工具,能够帮助用户快速完成MapGIS数据到SHP文件的转换,提高工作效率,简化工作流程。无论是专业GIS人员还是非专业用户,都可以受益于该工具的使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值