Article Detail

Golang版更换windows壁纸

package main import ( "crypto/md5" "encoding/hex" "errors" "fmt" "github.com/ant...

Go 阅读 10.9万 11 分钟阅读 2023-04-07 14:15
GDScript3
151 行
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
    }
}
Comments 评论区
广西南宁市 2023-04-07 14:28
代码片段
1 行
go mod init 新模块名字
代码片段
1 行
go get -u github.com/gin-gonic/gin
| | #0
广西南宁市 2023-04-15 00:57

golang里跳转到其他网页

GDScript3
22 行
package main

import (
    "github.com/labstack/echo"
    "net/http"
)

func HandleWelcome() func(c echo.Context) error {
    return func(c echo.Context) error {
        res := c.Response()
        w := res.Writer
        r := c.Request()
        http.Redirect(w, r, "http://www.baidu.com", http.StatusFound) //跳转到百度
        return nil
    }
}

func main() {
    e := echo.New()
    e.GET("/", HandleWelcome())
    e.Logger.Fatal(e.Start(":1323"))
}
| | #0
广西南宁市 2023-04-15 00:57
GDScript3
28 行
package main
// 打开系统默认浏览器

import (
    "fmt"
    "os/exec"
    "runtime"
)

var commands = map[string]string{
    "windows": "start",
    "darwin":  "open",
    "linux":   "xdg-open",
}

func Open(uri string) error {
    run, ok := commands[runtime.GOOS]
    if !ok {
        return fmt.Errorf("don't know how to open things on %s platform", runtime.GOOS)
    }

    cmd := exec.Command(run, uri)
    return cmd.Start()
}

func main() {
    Open("http://baidu.com")
}
| | #0
广西南宁市 2023-04-15 00:59
Go
4 行
	now:= time.Now()
	fmt.Println(now.Unix()) // 1565084298 秒
	fmt.Println(now.UnixNano()) // 1565084298178502600 纳秒
	fmt.Println(now.UnixNano() / 1e6) // 1565084298178 毫秒
| | #0
广西南宁市 2023-04-15 01:00
代码片段
17 行
now := time.Now()

// 方法一:

beginningOfDay := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
log.Println("今日已过(纳秒):", now.UnixNano()-beginningOfDay.UnixNano())
log.Println("今日已过(微秒):", now.UnixMicro()-beginningOfDay.UnixMicro())
log.Println("今日已过(毫秒):", now.UnixMilli()-beginningOfDay.UnixMilli())
log.Println("今日已过(秒):", now.Unix()-beginningOfDay.Unix())

// 方法二:

passedTimeNs := now.UnixNano() - beginningOfDay.UnixNano()
log.Println("今日已过(纳秒):", passedTimeNs)
log.Println("今日已过(微秒):", passedTimeNs/1e3)
log.Println("今日已过(毫秒):", passedTimeNs/1e6)
log.Println("今日已过(秒):", passedTimeNs/1e9)
| | #0
广西南宁市 2023-04-15 01:00

golang的右下角托盘图标

GDScript3
31 行
func onReady() {
	systray.SetIcon(icoData)
	systray.SetTitle("HTTP Server")
	systray.SetTooltip("服务已最小化右下角, 右键点击打开菜单!")
	mShow := systray.AddMenuItem("显示", "显示窗口")
	mHide := systray.AddMenuItem("隐藏", "隐藏窗口")
	systray.AddSeparator()
	mQuit := systray.AddMenuItem("退出", "退出程序")

	go func() {
		for {
			select {
			case <-mShow.ClickedCh:
				mShow.Disable()
				mHide.Enable()
				ShowConsole()
			case <-mHide.ClickedCh:
				mHide.Disable()
				mShow.Enable()
				HideConsole()
			case <-mQuit.ClickedCh:
				systray.Quit()
			}
		}
	}()

}

func onExit() {
	os.Exit(0)
}
广西南宁市2023-05-07 02:33:24

Golang Cmd启动另外一个exe程序

代码片段
1 行
    _, err = os.StartProcess("test.exe", nil, &os.ProcAttr{Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}})
| | #0
广西南宁市 2023-05-07 02:54

golang测试是否能ping通
使用开源库

代码片段
1 行
github.com/sparrc/go-ping

来判断是否能ping通

GDScript3
19 行
func ServerPing(target string) bool  {
    pinger, err := ping.NewPinger(target)
    if err != nil {
        panic(err)
    }

    pinger.Count = ICMPCOUNT
    pinger.Timeout = time.Duration(PINGTIME*time.Millisecond)
    pinger.SetPrivileged(true)
    pinger.Run()// blocks until finished
    stats := pinger.Statistics()

    fmt.Println(stats)
    // 有回包,就是说明IP是可用的
    if stats.PacketsRecv >= 1 {
        return true
    }
    return false
}

这里是通过回包数量来判断的
也可以通过掉包率来判断
同时,该库提供了Statistics结构体,包含了详细的ICMP信息

| | #0
Comment Form 留下评论
正在回复 #0
粘贴图片、拖拽文件,或点上面的按钮上传 图片会自动插入 [img] 标签,其他附件会自动插入 [attach] 标签。
正在上传...
提交前会先拉起旧项目同款第三方人机验证。

不再要求填写昵称;reply 会生成一条带楼层回链的新评论,quote 会附带完整引用块,并保持评论锚点跳转。

lizhenqiu blog is powered by lizhenqiu.com Version 6.9

Processed in 0.0441 second(s) W3C

本博客的所有原创作品采用 知识共享 署名-非商业性使用-相同方式共享 2.5 协议 进行许可

本站由 七七牛 云存储 阿阿里云 计算与安全服务 拍又拍云 CDN 加速 百百度智能 AAMH 布布集网 AI指南针AI

桂公网安备 45010302000998号 桂ICP备15007619号-1 中国互联网举报中心 建议使用谷歌浏览器浏览
Navigation 文章导航
⌂ ↓ ↑
100%
图片预览
Gallery 图集
0 张图片

正在整理正文和评论里的图片。

当前页还没有可展示的图片。
Quick Comment 快速评论

直接输入内容,提交时仍会走当前页面的人机验证。

正在上传...
操作提示