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