删除文章

确定要删除这篇文章吗?

取消
确定

golang设置桌面壁纸

     阅读(96)  2020-07-04 13:21:17

golang语言编写,设置windows桌面壁纸,图片来自于必应网站(cn.bing.com)

github源码地址:https://github.com/tujiaw/gowallpaper
有兴趣的Star一下吧

编译好的程序:https://pan.baidu.com/s/1l5OW9GeuUF0r5TFaBWkWZg (提取码:pcqh)

直接双击运行,显示如下:

设置微软必应的壁纸,用法如下:
day     - 每天更新壁纸
now     - 设置当天壁纸
prev    - 设置前一天壁纸
next    - 设置后一天壁纸
rand    - 间隔随机切换壁纸(如每分钟切换壁纸:rand 1m)
quit    - 退出
#

golang调用windows API

``` package winapi

import (

"log"
"syscall"
"unsafe"

)

var ApiList = map[string][]string {

"user32.dll": {
    "MessageBoxW",
    "SystemParametersInfoW",
},
"kernel32.dll": {

},

}

var ProcCache map[string]*syscall.Proc

func init() {

ProcCache = make(map[string]*syscall.Proc)
for dllName, apiList := range ApiList {
    d, err := syscall.LoadDLL(dllName)
    if err != nil {
        panic(err)
    }
    for _, name := range apiList {
        api, err := d.FindProc(name)
        if err != nil {
            log.Println(err, name)
        }
        ProcCache[name] = api
    }
    _ = syscall.FreeLibrary(d.Handle)
}

}

func WinCall(name string, a ...uintptr) {

if api, ok := ProcCache[name]; ok {
    _, _, err := api.Call(a...)
    if err != nil {
        log.Println(err)
    }
} else {
    log.Println("api not found, name:", name)
}

}

func IntPtr(n int) uintptr {

return uintptr(n)

}

func StrPtr(s string) uintptr {

p, _ := syscall.UTF16PtrFromString(s)
return uintptr(unsafe.Pointer(p))

}

func ShowMessage(title, text string) {

WinCall("MessageBoxW", IntPtr(0), StrPtr(text), StrPtr(title), IntPtr(0))

}

func SetWallpaper(bmpPath string) {

WinCall("SystemParametersInfoW", IntPtr(20), IntPtr(0), StrPtr(bmpPath), IntPtr(3))

} ````

文章评论

Keep it simple,stupid
文章数
338
今日访问
1805
今日IP数
641
最近评论

liangzi: 不错 谢谢分享
tujiaw: registerThreadInactive:如果当前没有激活的线程,就去激活线程,让等待的线程去执行任务。
hgzzx: 佩服佩服。 请教:registerThreadInactive的作用是什么?
xuehaoyun: 很不错,来围观一下
tujiaw: 抱歉csdn code服务关闭了,这个代码我也找不到了
于淞: 你好,这个文章的源码能分享一下吗,songsong9181@163.com,谢谢了 上面的写错了
回到顶部