JimenezLi

JimenezLi

Average Minecraft Modder
github

Windows 下自動編集デスクトップの壁紙

私は、毎日デスクトップの壁紙に xkcd の漫画を追加するプログラムを作成したいと思っています。そのために、以下の一連の手順を実行して機能を実現しました。

Python スクリプトの作成#

ウェブスクレイピングを使用して xkcd の漫画を取得する#

xkcd のウェブサイトの構造は非常にシンプルで、単に HTML 内のコミック画像のリンクを見つければよいです。以下のコードを使用します:

url = 'https://xkcd.com/'

try:
    # requestsライブラリを使用してウェブページを取得
    r = requests.get(url)
    r.raise_for_status()
    r.encoding = r.apparent_encoding

    # bs4.BeautifulSoupを使用してHTMLを解析
    soup = BeautifulSoup(r.text, 'lxml')
    imgs = soup.find_all('img')

    # 各画像リンクの中からxkcdの漫画リンクを見つける
    for i in imgs:
        src = str(i.get('src'))
        if '/comics/' in src:
            if src.startswith('//'):
                src = 'https:' + src

            # 漫画画像を取得して保存
            imgfile = requests.get(src)
            imgfile.raise_for_status()
            with open('./resources/xkcd.jpg', 'wb') as f:
                f.write(imgfile.content)
                f.close()
            print('xkcdの画像を取得しました')
            break
    else:
        raise Exception(f'{url}にコミックが見つかりませんでした')

# 例外が発生した場合は例外情報を保存
except Exception as e:
    print('xkcdの画像の取得に失敗しました')
    with open(f'crash.log', 'a') as f:
        # current_date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        print(f'[{current_date}]:', e, file=f)
        f.close()

PIL ライブラリを使用して壁紙を編集する#

他の画像処理ライブラリ、例えば OpenCV でも可能です。

# 背景を開く
wallpaper = Image.open('./resources/background.jpg')

# xkcdの画像を開く
xkcd = Image.open('./resources/xkcd.jpg')
wallpaper_xkcd = xkcd.resize((2 * xkcd.width, 2 * xkcd.height)).convert('RGB')
# ここではxkcdの漫画を壁紙の右上に配置します
wallpaper.paste(wallpaper_xkcd, box=(wallpaper.width * 15 // 16 - wallpaper_xkcd.width, wallpaper.height // 16))

# 壁紙を保存
with open('./wallpaper.jpg', 'wb') as f:
    wallpaper.save(f)
    f.close()

Windows API を使用して壁紙を変更する#

必要な Windows API を見つけるのは困難な作業でしたが、文心一言に助けを求めました。また、ChatGPT も使用できます。

win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, os.path.join(script_path, 'wallpaper.jpg'))

以下の図はプレビュー効果で、壁紙の右上に xkcd の漫画が追加されていることがわかります。
wallpaper.jpg

スクリプトを Windows タスクに追加する#

プログラムの設定が完了したら、定期的に実行するために Windows タスクに追加する必要があります。
Windows の検索機能(ショートカットキー:Windows+Q)を使用して、「タスクスケジューラ」を見つけます。右側の「操作」で「タスクの作成」をクリックして設定します。具体的な設定方法は、参考資料の「windows 定時実行 exe ファイル」を参照してください。
タスクスケジューラ

トリガーの設定#

必ずトリガーを設定してください。そうしないと、タスクはいつ実行されるべきかわかりません。私は毎日 23:00 に実行するように設定しました。
トリガー

操作のパラメータの設定#

  • プログラムまたはスクリプト:システムに Python がインストールされている場合、「プログラムまたはスクリプト」には python と入力するか、python.exe のパスを入力します。
  • 引数の追加:「引数の追加」にはスクリプトのパスを入力します。(実際にはすべてを「プログラムまたはスクリプト」に入力することもできますが、システムが自動的に引数を分割します)
  • 開始位置:必ず設定してください。そうしないと、プログラムが正しく実行されない場合があります。このパラメータはスクリプトのパスに設定します。

これで Windows で自動的にデスクトップ壁紙を編集することができます。

参考資料#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。