Win10 自动设置开机锁屏壁纸
Posted | stdout
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