源码修改Android go壁纸,Golang版更换windows 壁纸为 bing每日背景图

news/2024/11/23 23:27:20/

直接从 bing 搜索主页获取图片链接, 修改链接中的大小, 获取图片, 调用windows的 dll 设置桌面背景图

package main

import (

"crypto/md5"

"encoding/hex"

"errors"

"fmt"

"github.com/antchfx/htmlquery"

"io/ioutil"

"net/http"

"os"

"path/filepath"

"regexp"

"strings"

"syscall"

"time"

"unsafe"

)

const (

UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"

BingHomeURL = "https://cn.bing.com"

CurrentPathDir = "cache/"

)

const (

Size1k string = "1920,1080"

Size2k string = "2560,1440"

Size4k string = "3840,2160"

)

// ImageSize 图片大小

type ImageSize struct {

w string

h string

}

func init() {

_ = os.Mkdir(CurrentPathDir, 0755)

}

// EncodeMD5 MD5编码

func EncodeMD5(value string) string {

m := md5.New()

m.Write([]byte(value))

return hex.EncodeToString(m.Sum(nil))

}

// SetWindowsWallpaper 设置windows壁纸

func SetWindowsWallpaper(imagePath string) error {

dll := syscall.NewLazyDLL("user32.dll")

proc := dll.NewProc("SystemParametersInfoW")

_t, _ := syscall.UTF16PtrFromString(imagePath)

ret, _, _ := proc.Call(20, 1, uintptr(unsafe.Pointer(_t)), 0x1|0x2)

if ret != 1 {

return errors.New("系统调用失败")

}

return nil

}

// GetBingBackgroundImageURL 获取bing主页的背景图片链接

func GetBingBackgroundImageURL() (string, error) {

client := http.Client{}

request, err := http.NewRequest("GET", BingHomeURL, nil)

if err != nil {

return "", err

}

request.Header.Set("user-agent", UserAgent)

response, err := client.Do(request)

if err != nil {

return "", err

}

htmlDoc, err := htmlquery.Parse(response.Body)

if err != nil {

return "", err

}

item := htmlquery.FindOne(htmlDoc, "//div[@id=\"bgImgProgLoad\"]")

result := htmlquery.SelectAttr(item, "data-ultra-definition-src")

return BingHomeURL + result, nil

}

// DownloadImage 下载图片,保存并返回保存的文件名的绝对路径

func DownloadImage(imageURL string, size *ImageSize) (string, error) {

wRegexp := regexp.MustCompile("w=\\d+")

hRegexp := regexp.MustCompile("h=\\d+")

imageURL = wRegexp.ReplaceAllString(imageURL, "w="+size.w)

imageURL = hRegexp.ReplaceAllString(imageURL, "h="+size.h)

client := http.Client{}

request, err := http.NewRequest("GET", imageURL, nil)

if err != nil {

return "", err

}

response, err := client.Do(request)

if err != nil {

return "", err

}

body, err := ioutil.ReadAll(response.Body)

if err != nil {

return "", err

}

day := time.Now().Format("2006-01-02")

fileName := EncodeMD5(imageURL)

path := CurrentPathDir + fmt.Sprintf("[%sx%s][%s]%s", size.w, size.h, day, fileName) + ".jpg"

err = ioutil.WriteFile(path, body, 0755)

if err != nil {

return "", err

}

absPath, err := filepath.Abs(path)

if err != nil {

return "", err

}

return absPath, nil

}

func main() {

fmt.Println("获取必应背景图中...")

imageURL, err := GetBingBackgroundImageURL()

if err != nil {

fmt.Println("获取背景图片链接失败: " + err.Error())

return

}

fmt.Println("获取成功: " + imageURL)

fmt.Println("下载图片...")

imagePath, err := DownloadImage(imageURL, &ImageSize{

w: strings.Split(Size4k, ",")[0],

h: strings.Split(Size4k, ",")[1],

})

if err != nil {

fmt.Println("下载图片失败: " + err.Error())

return

}

fmt.Println("设置桌面...")

err = SetWindowsWallpaper(imagePath)

if err != nil {

fmt.Println("设置桌面背景失败: " + err.Error())

return

}

}

有疑问加站长微信联系(非本文作者)


http://www.ppmy.cn/news/224705.html

相关文章

Python scrapy学习之爬取2k唯美壁纸详细过程笔记及讲解

Scrapy 学习爬取图片 Scrapy 爬取图片时候绕了很多圈子,才明白了走了很大的弯路,幸亏绕出来了(大话可能说得有点早~),赶紧记录一下心得体会: 创建爬虫时的参数选择: 一是普通创建爬虫法&#x…

动态壁纸安卓_高清无水印!这4款壁纸软件,让你的手机好看又独特

手机与我们每日相伴,我们总会精心挑选各种图片设置为手机壁纸,有时换个壁纸就像换了一种心情一样。 但网上搜索的壁纸大同小异,有没有风格独特又有趣的?今天就给大家推荐4款各具特色的壁纸App,保证给你耳目一新的感觉。…

【Java并发编程】8.说点JMM 让你的面试锦上添花

并发编程关键问题 JDK天生就是多线程的,多线程大大提速了程序运行的速度,但是凡事有利就有弊,并发编程时经常会涉及到线程之间的通信跟同步问题,一般也说是可见性、原子性、有序性。 线程通信 线程的通信是指线程之间通过什么机制来交换信息,在编程中常用的通信机制有两…

android+壁纸+比例,安卓手机壁纸尺寸选择攻略:屏幕分辨率≠壁纸分辨率

1、安卓手机壁纸的分辨率 ≠ 安卓手机屏幕分辨率 像iPhone等很多手机,都是手机壁纸的分辨率 手机屏幕的分辨率(或者等比例的分辨率)。但是安卓手机则有自己一套创新的壁纸系统,手机壁纸的分辨率不等于手机屏幕的分辨率。 例如,的HTC屏幕分辨率…

ubuntu命令 图片 壁纸_用Linux命令来当壁纸

你的位置: 问答吧 -> Unix -> 问题详情 用Linux命令来当壁纸 Linux命令是谁都怕的东西,我也怕,不过不能不学,在Linux下驾驶就够它了,同时它也比较的难记,不过你可以制作一张Linux命令来当壁纸,这样你…

30张被厂商阉割掉的Andorid7.0原生2K壁纸,我们为你优选最优质的10张

历代的Android系统总是以甜品命名,Android4.1的果冻豆(Jelly Bean),Android5.0的棒棒糖(Lollipop),而Android7.0也不例外,以牛轧糖(Nougat)命名。 后台回复:「…

dll修复都有哪些方法?详细解析各种dll修复方法

DLL(动态链接库)是 Windows 操作系统中的一种重要文件,它包含了许多程序所需的函数和资源。因此,当 DLL 文件出现问题时,可能会导致程序无法正常运行,甚至整个系统崩溃。这时候需要使用 DLL 修复工具进行修…