package main
import (
"fmt"
"os"
"syscall"
"unsafe"
)
const (
SPI_SETDESKWALLPAPER = 0x0014
SPIF_UPDATEINIFILE = 0x0001
SPIF_SENDCHANGE = 0x0002
)
func main() {
// 获取指定的图片文件路径
//args := os.Args[1:]
//if len(args) != 1 {
// fmt.Println("请提供一个图片文件路径")
// return
//}
file := "D:\\Downloads\\S21\\test2.jpeg"
// 检查文件是否存在
if _, err := os.Stat(file); err != nil {
fmt.Println("文件不存在或不可访问")
return
}
// 加载user32.dll库
user32 := syscall.MustLoadDLL("user32.dll")
// 查找SystemParametersInfoW函数
systemParametersInfo := user32.MustFindProc("SystemParametersInfoW")
// 调用函数,更改壁纸
ret, _, err := systemParametersInfo.Call(
SPI_SETDESKWALLPAPER,
0,
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(file))),
SPIF_UPDATEINIFILE|SPIF_SENDCHANGE,
)
if ret == 0 {
fmt.Println("更改壁纸失败:", err)
return
}
fmt.Println("更改壁纸成功")
}
或者:
package main
import (
"fmt"
"syscall"
"unsafe"
)
const (
SpiSetdeskwallpaper = 20
SpifUpdateinifile = 0x01
SPIF_SENDWININICHANGE = 0x02
)
func main() {
path := "D:\\Downloads\\S21\\test2.jpeg"
ret := SystemParametersInfo(SpiSetdeskwallpaper, 0,
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(path))),
SpifUpdateinifile|SPIF_SENDWININICHANGE)
if ret == 0 {
fmt.Println("Failed to set wallpaper")
} else {
fmt.Println("Wallpaper set successfully")
}
}
func SystemParametersInfo(uiAction, uiParam uint32, pvParam uintptr, fWinIni uint32) int32 {
var user32 = syscall.NewLazyDLL("user32.dll")
var proc = user32.NewProc("SystemParametersInfoW")
ret, _, _ := proc.Call(
uintptr(uiAction),
uintptr(uiParam),
uintptr(pvParam),
uintptr(fWinIni),
)
return int32(ret)
}
然后打包生成exe文件
GOOS=windows GOARCH=amd64 go build -o your-app-name.exe