源码修改Android go壁纸,使用代码修改Windows系统壁纸的方法

必须是能够修改和立刻刷新,看到效果的方法。所以不使用修改注册表的方式,而是直接调用系统dll方法。关键方法为user32.dll的SystemParametersInfo。

(在Windows7下测试通过)

另外,所有方法均需要图片为bmp格式。否则需要先转换得到bmp格式的图片。

Python

import win32gui

def setWallpaper(imgPath):

win32gui.SystemParametersInfo(20, imgPath, 3)

* 推荐使用pillow库进行图像格式转换。

Go

import (

"syscall"

"unsafe"

"fmt"

)

func setWallPaper(imgPath string) {

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

proc := dll.NewProc("SystemParametersInfoW")

ret, _, _ := proc.Call(20, 1,

uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(imgPath))),

0x1 | 0x2)

fmt.Print(ret)

}

* 原生image库支持图像格式转换。支持bmp需要golang.org/x/image/bmp

Node

推荐调用其他语言编译结果。或写编写C++ addon。

* node的库node-ffi可以调用dll;库sharp可以处理图片,但不支持bmp。

C++

在微软官方网站给出的代码基础上修改:

#include

#include

#pragma comment(lib, "user32.lib")

int main()

{

BOOL fResult;

UINT* bmpPath = (UINT*)"D:\\Pictures\\wp.bmp";

fResult = SystemParametersInfo(SPI_SETDESKWALLPAPER,

1,

bmpPath,

SPIF_UPDATEINIFILE);

std::cout << fResult;

return 0;

}

C#

// 部分

[DllImport("user32.dll", EntryPoint = "SystemParametersInfoA")]

static extern Int32 SystemParametersInfo(Int32 uAction, Int32 uParam, string lpvparam, Int32 fuwinIni);

void fucntion SetWallpaper(imgPath) {

int nResult;

nResult = SystemParametersInfo(20, 1, bmpPath, 0x1 | 0x2);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值