Win10 自动设置开机锁屏壁纸 - Est's Blog

Win10 自动设置开机锁屏壁纸

Win10启动后,锁屏界面有一些每天更新的漂亮的墙纸,但是每个用户进去却只能看到默认的墙纸,不能自动切换。很是遗憾,于是搞了一段小脚本弥补。

找个地方比如桌面,右键新建一个 est_win10_auto_wallpaper.bat

@if (@X)==(@Y) @end /* JScript comment
@echo off

cscript //E:JScript %~n0.bat

exit /b %errorlevel%
*/

var oShell = new ActiveXObject("WScript.Shell") ;
var oFSO = new ActiveXObject("Scripting.FileSystemObject");

var sWinDir = oFSO.GetSpecialFolder(0);
var sPath = oShell.ExpandEnvironmentStrings('%LOCALAPPDATA%\\Packages\\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\\LocalState\\Assets\\')

var oFolderEnum = new Enumerator(oFSO.GetFolder(sPath).Files);
var aFiles = []
for (;!oFolderEnum.atEnd();oFolderEnum.moveNext()) {
    // var item = oFolderEnum.item()
    aFiles.push(oFolderEnum.item())
}
var aFiles2 = aFiles.sort(function(x,y){return new Date(y.DateLastAccessed).getTime() - new Date(x.DateLastAccessed).getTime()}).slice(3)
var sWallpaper;
// for (var i=0;i<aFiles2.length;i++){
for (var i in aFiles2){
    // WScript.Echo('check ' + aFiles2[i].name + ' size: ' + aFiles2[i].size);
    if(aFiles2[i].size > 500000){  // guess > 500KB is good wallpaper
        sWallpaper = aFiles2[i].path
        break;
    }    
}
if(sWallpaper){
    // or fso.GetStandardStream(1) for stdout, 2 for stderr
    // WScript.Echo('set to ' + sWallpaper);
    oShell.RegWrite("HKCU\\Control Panel\\Desktop\\Wallpaper", sWallpaper);
    oShell.Run("%windir%\\System32\\RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 1, True");
}

Win+R输入 shell:startup 回车,把刚才的 est_win10_auto_wallpaper.bat 在这里创建一个快捷方式

解释下为啥要在 shell:startup 里创建快捷方式而不是直接放 .bat 。因为快捷方式可以设置当前运行目录,这样代码里的 %~n0 才能生效。懒得查询完整路径如何写了。。

然后这段代码其实用了一个比较高级的 .js .bat 混合格式。因为 Windows Smart Screen 会拦截 WScript 的直接执行,认为特别危险。但是如果你在 cmd 里执行系统就觉得很安全。。。。嗯。。

吐槽1: 开始 → 启动 菜单都不见了。。。

吐槽2:好久没写 WScript 了感觉都忘完了。vbs 是肯定不会的了。JScript 居然是 ESMAScript3。好多现代写法都不支持。

Comments