利用Powershell每天自动设置提取Win10的windows聚焦图片(Spotlight)作为桌面壁纸的方法

微软在 Windows 10 上新增了一项功能 Windows 聚焦 (Windows Spotlight),它会自动随机下载并更换锁屏界面的壁纸 (Lockscreen),让你每次打开电脑都有不一样的视觉享受。这些高清锁屏壁纸往往都很精美,很多视觉冲击力十足,非常值得收藏。但很多同学想将这些壁纸设为桌面,却不知道怎样下载保存Win10的锁屏壁纸。实际上这些精美的图片都在你电脑上的缓存文件夹中,比如我的就在“C:\Users\Anymake\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets”中,这些缓存文件没有后缀名,你只需要重命名加上.jpg就可以看到了。这些手动提取的教程各大网站都有介绍。
但是每次手动复制比较繁琐,我实现了一个自动化的将每天新更新的Windows 聚焦 (Windows Spotlight)图片设置为桌面壁纸的程序。本方法不需要单独安装任何软件,只需要windows自带的Powershell和任务计划程序就可以了。

一、编写自动提取并设置为壁纸的脚本

打开一个文本文件,复制以下代码,保存后缀为.ps1,命名为SetWallPaperFromSpotlight.ps1,然后右键“使用powershell运行”就可以发现桌面壁纸已经被设置为了最新的图片。所有的聚焦图片都被复制到你自己的用户文件夹下的Spotlight文件夹。比如我的是在:“C:\Users\Anymake\Pictures\Spotlight”。这样你就有了一个手动提取并设置最新图片为桌面壁纸的方法。下面第二步介绍每天电脑自动设置的方法。

  1. # 将复制出来的缓存图片保存在下面的文件夹  
  2. add-type -AssemblyName System.Drawing  
  3. New-Item "$($env:USERPROFILE)\Pictures\Spotlight" -ItemType directory -Force;  
  4. New-Item "$($env:USERPROFILE)\Pictures\Spotlight\CopyAssets" -ItemType directory -Force;  
  5. New-Item "$($env:USERPROFILE)\Pictures\Spotlight\Horizontal" -ItemType directory -Force;  
  6. New-Item "$($env:USERPROFILE)\Pictures\Spotlight\Vertical" -ItemType directory -Force;  
  7.  
  8. # 将横竖图片分别复制到对应的两个文件夹  
  9. foreach($file in (Get-Item "$($env:LOCALAPPDATA)\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets\*"))  
  10. {  
  11.     if ((Get-Item $file).length -lt 100kb) { continue }  
  12.     Copy-Item $file.FullName "$($env:USERPROFILE)\Pictures\Spotlight\CopyAssets\$($file.Name).jpg";  
  13. }  
  14.   
  15. foreach($newfile in (Get-Item "$($env:USERPROFILE)\Pictures\Spotlight\CopyAssets\*"))  
  16. {  
  17.     $image = New-Object -comObject WIA.ImageFile;  
  18.     $image.LoadFile($newfile.FullName);  
  19.     if($image.Width.ToString() -eq "1920"){ Move-Item $newfile.FullName "$($env:USERPROFILE)\Pictures\Spotlight\Horizontal" -Force; }  
  20.     elseif($image.Width.ToString() -eq "1080"){ Move-Item $newfile.FullName "$($env:USERPROFILE)\Pictures\Spotlight\Vertical" -Force; }  
  21. }  
  22.  
  23. # 壁纸设置函数  
  24. function Set-Wallpaper  
  25. {  
  26.     param(  
  27.         [Parameter(Mandatory=$true)]  
  28.         $Path,  
  29.    
  30.         [ValidateSet('Center''Stretch')]  
  31.         $Style = 'Center'  
  32.     )  
  33.    
  34.     Add-Type @"  
  35. using System;  
  36. using System.Runtime.InteropServices;  
  37. using Microsoft.Win32;  
  38. namespace Wallpaper  
  39. {  
  40. public enum Style : int  
  41. {  
  42. Center, Stretch  
  43. }  
  44. public class Setter {  
  45. public const int SetDesktopWallpaper = 20;  
  46. public const int UpdateIniFile = 0x01;  
  47. public const int SendWinIniChange = 0x02;  
  48. [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]  
  49. private static extern int SystemParametersInfo (int uAction, int uParam, string lpvParam, int fuWinIni);  
  50. public static void SetWallpaper ( string path, Wallpaper.Style style ) {  
  51. SystemParametersInfo( SetDesktopWallpaper, 0, path, UpdateIniFile | SendWinIniChange );  
  52. RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop"true);  
  53. switch( style )  
  54. {  
  55. case Style.Stretch :  
  56. key.SetValue(@"WallpaperStyle""2") ;  
  57. key.SetValue(@"TileWallpaper""0") ;  
  58. break;  
  59. case Style.Center :  
  60. key.SetValue(@"WallpaperStyle""1") ;  
  61. key.SetValue(@"TileWallpaper""0") ;  
  62. break;  
  63. }  
  64. key.Close();  
  65. }  
  66. }  
  67. }  
  68. "@  
  69.    
  70.     [Wallpaper.Setter]::SetWallpaper( $Path, $Style )  
  71. }  
  72.    
  73.   
  74. $filePath = "$($env:USERPROFILE)\Pictures\Spotlight\Horizontal\*"  
  75. $file = Get-Item -Path $filePath | Sort-Object -Property LastWriteTime -Descending | Select-Object -First 1  
  76. Set-Wallpaper -Path $file.FullName    
  77. # echo $file.FullName  
  78.   
  79. Remove-Item "$($env:USERPROFILE)\Pictures\Spotlight\CopyAssets\*";  
  80. #pause  

其中设置桌面壁纸的代码参考自:http://www.pstips.net/powershell-change-wallpaper.html

提取windows聚焦的图片参考自:http://www.iplaysoft.com/save-win10-spotlight-wallpapers.html


二、利用windows自带的任务计划程序每天自动运行脚本

必须以管理员身份登录才能执行这些步骤。如果不是以管理员身份登录,则您仅能更改适用于您的用户帐户的设置。

1、由于windows默认的任务计划没有权限执行ps1脚本,因此首先需要用管理员运行Windows PowerShell



2、输入 Set-ExecutionPolicy Unrestricted进行权限更改,输入Y确认



3、打开“任务计划程序”,方法是依次单击“控制面板”、“系统和安全性”、“管理工具”,然后双击“任务计划程序”。‌  需要管理员权限 如果系统提示您输入管理员密码或进行确认,请键入该密码或提供确认。
单击“操作”菜单,然后单击“创建任务”。
配置如下:

常规:键入任务的名称比如SetWallPaperFromSpotlight和描述(可选)  - 勾选“使用最高权限运行”



触发器:新建 - 选择“制定计划时” - 选择 执行时间如“7:30:00” - 选择执行周期如“每天 每隔1天发生一次” - 勾选"启用",也可以根据需要选择每小时,每半小时或者更高的频率运行脚本。



操作:新建 - 选择“启动程序” - "powershell" ,添加参数为文件路径,如"D:\code\py\SetWallPaperFromSpotlight.ps1",- 点击“确定”


所有完成就大功告成了,要检查效果的话,单机左侧的任务计划程序库,从右边找到你刚设置的SetWallPaperFromSpotlight任务,右键立即运行就可以看到效果了。

PS:

首先,确保你的 Windows 10 已经开启了“聚焦”壁纸功能,桌面右键 > 个性化 > 锁屏界面 > “背景”选项下选择 “Windows 聚焦”即为开启,之后系统将会自动联网更换锁屏壁纸。为了使任务栏颜色随着壁纸改变,最好将颜色设置为从壁纸中自动选取


转载自:http://blog.csdn.net/anymake_ren/article/details/51125609

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值