想给电脑换上必应的每日壁纸,之前使用的是Bing Wallpaper软件,这个软件每日刷新只能更换为前一天的壁
纸,而且需要自启动更换壁纸,于是打算用定时计划powershell脚本完成这个工作。

1.解除PowerShell限制

.ps1文件类似.bat文件,是PowerShell写好的脚本文件。
在Windows系统中,默认情况下是不允许执行.ps1文件的。
PowerShell中执行如下命令

Set-ExecutionPolicy Unrestricted

执行完毕之后就能运行.ps1脚本了。

2.更换壁纸方法

function Set-Wallpaper($image) {$source = @"using System;using System.Runtime.InteropServices;public class Params{[DllImport("User32.dll",CharSet=CharSet.Unicode)]public static extern int SystemParametersInfo (Int32 uAction,Int32 uParam,String lpvParam,Int32 fuWinIni);}
"@Add-Type -TypeDefinition $source$SPI_SETDESKWALLPAPER = 0x0014$UpdateIniFile = 0x01$SendChangeEvent = 0x02$fWinIni = $UpdateIniFile -bor $SendChangeEvent$ret = [Params]::SystemParametersInfo($SPI_SETDESKWALLPAPER, 0, $Image, $fWinIni)
}
Set-WallPaper -image "壁纸路径"

将"壁纸路径"更换为要设置的壁纸路径,保存代码至.ps1文件执行即可更换壁纸

3.自动执行

使用计划任务可以自动执行脚本
打开 控制面板 - 系统和安全 - 管理工具 - 计划任务
打开后点击 创建基本任务
根据向导设置任务参数

其中启动程序中的程序或脚本设置为 powershell 添加参数(可选) 设置为刚刚保存好的.ps1文件

4.获取必应每日壁纸并设置

更改代码如下

function Save-BingTodayImage()
{#必应图片故事API$bingImageApi ='http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1&mkt=zh-cn'$bingUri = 'http://www.bing.com/'# 获取图片链接[xml]$bingImageXml = (Invoke-WebRequest -Uri $bingImageApi).ContentWrite-Host " 今日图片故事: $( $bingImageXml.images.image.copyright ) "$imgLink = '{0}{1}' -f $bingUri , $bingImageXml.images.image.url# 下载和保存图片$imageDir = "$HOME\Pictures\Bing\"if( -not (Test-Path $imageDir) ){mkdir $imageDir | Out-Null}else{# 删除过期图片Remove-Item ${imageDir}*}$imageFile = Join-Path $imageDir ( '{0}.jpg' -f $bingImageXml.images.image.fullstartdate)Invoke-WebRequest -Uri $imgLink -OutFile $imageFilereturn $imageFile
}function Set-DesktopWallPaper($imagePath)
{Set-ItemProperty -path 'HKCU:\Control Panel\Desktop\' -name wallpaper -value $imagePathRUNDLL32.EXE USER32.DLL UpdatePerUserSystemParameters ,1 ,True
}# 获取今日必应背景图片
$image=Save-BingTodayImage#设置为桌面墙纸
Set-DesktopWallPaper -imagePath $image

大功告成!


补充

按照以上方式执行定时计划时,每次都会弹出powershell窗口,查了很多方法也不能像类似pythonw.exe方式静默(不打开窗口)执行ps1脚本,于是想到之前写的c#调用Windows脚本的方法。

主要思路

使用c#中的process类调用powershell,将StartInfo.CreateNoWindow设置为true,即不打开窗口执行程序,亲测有效!

c#代码

新建c#控制台项目,为防止产生运行黑框,右键项目属性输出类型设置为Windows应用程序

static void Main(string[] args)
{ExecutePowerShell();
}static void ExecutePowerShell()
{Process pro = new Process();pro.StartInfo.FileName = "powershell";pro.StartInfo.RedirectStandardInput = true;pro.StartInfo.UseShellExecute = false;pro.StartInfo.CreateNoWindow = true;string path = @""; //ps1脚本文件位置,自行修改pro.Start();pro.StandardInput.WriteLine(path);pro.StandardInput.WriteLine("exit"); //执行完退出powershellpro.StandardInput.AutoFlush = true;pro.WaitForExit();pro.Close();
}

代码写好后发布到文件夹。

修改任务计划参数

需管理员权限执行

修改运行程序,由于c#发布后是exe可执行文件,直接将要运行的程序改为发布的exe文件即可。

设置完成后每次执行任务时就不会弹出窗口了!

Windows更换壁纸脚本 获取必应壁纸 定时更换壁纸 c#调用.ps1脚本相关推荐

  1. Python桌面自定义---实现定时更换桌面壁纸

    Python桌面自定义---实现定时更换桌面壁纸 1 效果 2 获取大量壁纸 3 Python代码实现定时更换壁纸 1 效果   大致效果如下,设置过定时更换壁纸的应该都知道是啥场景. 2 获取大量壁 ...

  2. bat脚本 获取copy命令结果

    在Windows系统中,可以使用BAT脚本获取COPY命令的结果.可以在BAT脚本中使用以下语句来实现: for /f "tokens=*" %i in ('copy source ...

  3. linux脚本定时执行,Shell脚本实现每个工作日定时执行指定程序

    我们可能会遇到这样的情景:必须在每个工作日定时执行 原理很简单,Shell脚本内部每隔1秒查询一次当前时间.日期以及星期数,当检测到当前星期数week非0或6(0代表星期天,6代表星期六)且时间cur ...

  4. Windows上PowerShell默认禁止运行 *.ps1 脚本原因与解决方法

    一.问题描述 当调用express包中的".\build.ps1"脚本时,由于安全系统的设置,终端会阻止'.ps1'类型的脚本文件运行,导致指令无法执行 二.解决方法 1.以管理员 ...

  5. 在Java中动态传参调用Python脚本

    最近,又接触到一个奇葩的接口,基于老板不断催促赶时间的情况下,在重写java接口和复用已有的python脚本的两条路中选择了后者,但是其实后者并没有好很多,因为我是一个对python的认识仅限于其名称 ...

  6. Java调用python脚本

    Java调用python脚本 最近也是刚开始学python,所以这里写了一个简单的小方法用Java来调用python脚本.后期再进行更新. 1.Java启动程序的方法 在Java中提供了两种方法来启动 ...

  7. BIRT 调用 SPL 脚本

    结构图如下: BIRT 中调用 SPL,首先需要将集算器 JDBC 集成到 BIRT 设计器中,简单来说就是,将加载集算器所需的 jar 包及配置文件放到 BRIT 对应目录中.需要注意的是,集算器 ...

  8. 【Groovy】闭包 Closure ( 闭包中调用 Groovy 脚本中的方法 | owner 与 delegate 区别 | 闭包中调用对象中的方法 )

    文章目录 一.闭包中调用 Groovy 脚本中的方法 二.owner 与 delegate 区别 三.闭包中调用 Groovy 对象中的方法 一.闭包中调用 Groovy 脚本中的方法 在 Groov ...

  9. java执行python返回null_[转]java调用python脚本以及通过Process.waitFor()直接调用python模块返回错误代码1的一种解决办法...

    常见的java调用python脚本方式 通过jython提供的类库实现 通过Runtime.getRuntime()开启进程来执行脚本文件 通过jython提供的类库实现 通过jython实现的话,我 ...

最新文章

  1. MySql5.7环境搭建
  2. 通过注册表修改VC6.0的字体【转】
  3. 销售自己使用过的小汽车纳多少增值税
  4. python -c带来的惊喜
  5. 整合axis2到web项目中
  6. 湖北省仙桃市2021年高考成绩查询,2021年4月湖北仙桃市自考成绩查询时间和有效期是多久?...
  7. c语言平面向量加法考点,平面向量的加减法怎么死活都不会?有没有什么口诀?例如:向量AB+BC=?向量OA-OB=?向量AB-CB=?有没有什么口诀!...
  8. 最长递增子序列LIS再谈
  9. C++ 抛出异常与传递参数的区别
  10. 【C++】对象作为函数参数【原创技术】
  11. 乌班图各版本镜像文件下载
  12. 视频教程-Xamarin技术讲座——初级篇-其他
  13. 【Python 3.7】熟食店:创建一个名为 sandwich_orders 的列表,在其中包含各种三明治的名 字;再创建一个名为 finished_sandwiches 的空列表……
  14. git 记住账号密码、忽略部分文件、合并分支、将远程分支拉取到本地
  15. 考研英语 - word-list-31
  16. Gram矩阵及其实际含义
  17. Unity安卓Android平台StreamingAssets下文件的读取
  18. 淘宝SEO定义、优化淘宝SEO的技巧,优化店铺,流量、排名不是问题
  19. adb无法连接上夜神模拟器夜神模拟器cannot connect to 127.0.0.1:62001: 由于目标计算机积极拒绝,无法连接。 (10061)
  20. python脚本一键抓考试资料网答案

热门文章

  1. Macbook matlab启动无响应问题解决方案
  2. c语言显示格式错误,C语言,输出里多空格,提交格式错误,怎么改下
  3. firefox 详细配置文件 及 密码解析
  4. Anaconda3最新版2022版网盘(云盘)免费,不限速
  5. ip地址转换数字函数 iton_c# – RabbitMQ CreateConneciton问题 – 在一个应用程序中运行,但在另一个应用程序中运行...
  6. 软件系统分析与设计指南--HOMEWORK1
  7. python:实现IIR 滤波器算法(附完整源码)
  8. Java精品项目源码第117期超市收银管理系统
  9. QThread、moveToThread用法详述
  10. 千月影视v21 2023年新版 前端+后端+h5 无授权运营级 仅供学习研究使用