[辅助]Win10锁屏壁纸保存以及随机设置壁纸

分享一个自用的脚本。收集win10锁屏壁纸,并在每次启动时随机设置壁纸。
1、可以手动切换壁纸
2、理论上手动删除的壁纸不会再次收集,很简单的根据修改时间判断,不一定靠谱。
3、默认不开机启动
4、壁纸从临时文件获取,需要一段时间的积累,当然也可以手动往壁纸库放jpg文件

https://github.com/fuwt/AhkScript/blob/master/Win10_Lock_IMG.ahk

[辅助]Win10锁屏壁纸保存以及随机设置壁纸

#Persistent
SavePath := A_ScriptDir . "\lockimg\"
startuplnk := A_StartMenu . "\Programs\Startup\Win10_Lock_IMG.lnk"
loop, files, % A_AppData . "\..\Local\Packages\Microsoft.Windows.ContentDeliveryManager_*", D
    Source := A_LoopFileFullPath . "\LocalState\Assets\*"
SavePath := RTrim(SavePath, "\")
If(!FileExist(SavePath))
{
    FileCreateDir, % SavePath
    FileSetTime, 19000101, % SavePath
}
FileGetTime, StartTime, % SavePath
SavePath .= "\"

pToken := Gdip_Startup()
Loop, files, % Source
{
    FileGetTime, OutputVar, % A_LoopFileFullPath
    if(OutputVar <= StartTime)
        continue
    img := Gdip_CreateBitmapFromFile(A_LoopFileFullPath)
    w := Gdip_GetImageWidth(img)
    if ( w := Gdip_GetImageWidth(img) > 1200 &&  w > Gdip_GetImageHeight(img))
        FileCopy, % A_LoopFileFullPath, % SavePath . A_LoopFileName . ".jpg"
}
Gdip_Shutdown(pToken)

img := []
Loop, files, % SavePath . "*.jpg"
{
    img[A_Index] := A_LoopFileFullPath
}
min := 1
max := img.Length()

GoSub SetRandomWallpaper
Menu, Tray, NoStandard
Menu, Tray, Add, 随机壁纸(&R),SetRandomWallpaper
Menu, Tray, Default,随机壁纸(&R) 
Menu, Tray, Add, 上一张壁纸(&P),SetPreviousWallpaper
Menu, Tray, Add, 下一张壁纸(&N),SetNextWallpaper
Menu, Tray, Add, 开机启动,AutoStart
Menu, Tray, Add, 打开壁纸文件夹(&O),OpenDir
Menu, Tray, Add, 删除当前壁纸(&D),DelWallpaper
Menu, Tray, Add, 重启, Reload
Menu, Tray, Add, 退出, Exit
if(FileExist(startuplnk))
    Menu, Tray, Check, 开机启动
return

SetRandomWallpaper:
    Random, i, % min, % max
    SetWallpaper(img[i])
return

SetNextWallpaper:
    i += 1
    SetWallpaper(img[i])
return

SetPreviousWallpaper:
    i -= 1
    SetWallpaper(img[i])
return

OpenDir:
    run % SavePath
return

DelWallpaper:
    msgbox, 36, 删除壁纸, 确定删除当前壁纸吗?
    IfMsgBox, Yes
        FileRecycle, % img[i]
    GoSub SetRandomWallpaper
return

AutoStart:
    if(FileExist(startuplnk))
        FileDelete, % startuplnk
    else
        FileCreateShortcut, % A_ScriptFullpath, % startuplnk
    Menu, Tray, ToggleCheck, 开机启动
return

Exit:
    ExitApp
return

Reload:
    Reload
return

; 函数列表

SetWallpaper(BMPpath)
{
	SPI_SETDESKWALLPAPER := 20
	SPIF_SENDWININICHANGE := 2  
	Return DllCall("SystemParametersInfo", UINT, SPI_SETDESKWALLPAPER, UINT, uiParam, STR, BMPpath, UINT, SPIF_SENDWININICHANGE)
}

Gdip_Startup()
{
	Ptr := A_PtrSize ? "UPtr" : "UInt"
	
	if !DllCall("GetModuleHandle", "str", "gdiplus", Ptr)
		DllCall("LoadLibrary", "str", "gdiplus")
	VarSetCapacity(si, A_PtrSize = 8 ? 24 : 16, 0), si := Chr(1)
	DllCall("gdiplus\GdiplusStartup", A_PtrSize ? "UPtr*" : "uint*", pToken, Ptr, &si, Ptr, 0)
	return pToken
}

Gdip_Shutdown(pToken)
{
	Ptr := A_PtrSize ? "UPtr" : "UInt"
	
	DllCall("gdiplus\GdiplusShutdown", Ptr, pToken)
	if hModule := DllCall("GetModuleHandle", "str", "gdiplus", Ptr)
		DllCall("FreeLibrary", Ptr, hModule)
	return 0
}

Gdip_CreateBitmapFromFile(sFile, IconNumber := 1, IconSize := "")
{
	Ptr := A_PtrSize ? "UPtr" : "UInt"
	PtrA := A_PtrSize ? "UPtr*" : "UInt*"
        DllCall("gdiplus\GdipCreateBitmapFromFile", Ptr, &sFile, PtrA, pBitmap)
	return pBitmap
}

Gdip_GetImageWidth(pBitmap)
{
   DllCall("gdiplus\GdipGetImageWidth", A_PtrSize ? "UPtr" : "UInt", pBitmap, "uint*", Width)
   return Width
}

Gdip_GetImageHeight(pBitmap)
{
   DllCall("gdiplus\GdipGetImageHeight", A_PtrSize ? "UPtr" : "UInt", pBitmap, "uint*", Height)
   return Height
}

 

 

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA捐赠
共{{data.count}}人
人已捐赠
其他

[RunAnyCtrl]AHK获取CMD命令结果三种方法

2018-4-29 6:46:47

其他案例

一键安装7z [办公]7-zip_ASetup.exe 作者:徐晓亮 ( aahk ) QQ595076941

2018-5-30 11:25:36

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
有新私信 私信列表
搜索