加快Powershell脚本来更改我的墙纸背景

时间:2018-08-23 17:40:05

标签: powershell

因此,我制作了一个powershell脚本来更改壁纸背景。代码在下面发布。我将脚本绑定到笔记本电脑上的热键。

问题是,当我按下热键时,打开电源壳会延迟一段时间,然后更改背景。更换墙纸需要2-3秒。它也只能在大约75%的时间内工作(因此重复了第4到15行)。

我在Linux环境中有一个立即的bash脚本。我希望在Windows中获得相同的行为。任何帮助,将不胜感激。

Function Set-WallPaper($Value)
{
 Set-ItemProperty -path 'HKCU:\Control Panel\Desktop\' -name wallpaper -value $value
 rundll32.exe user32.dll, UpdatePerUserSystemParameters
 rundll32.exe user32.dll, UpdatePerUserSystemParameters
 rundll32.exe user32.dll, UpdatePerUserSystemParameters
 rundll32.exe user32.dll, UpdatePerUserSystemParameters
 rundll32.exe user32.dll, UpdatePerUserSystemParameters
 rundll32.exe user32.dll, UpdatePerUserSystemParameters
 rundll32.exe user32.dll, UpdatePerUserSystemParameters
 rundll32.exe user32.dll, UpdatePerUserSystemParameters
 rundll32.exe user32.dll, UpdatePerUserSystemParameters
 rundll32.exe user32.dll, UpdatePerUserSystemParameters
 rundll32.exe user32.dll, UpdatePerUserSystemParameters
 rundll32.exe user32.dll, UpdatePerUserSystemParameters
}

$pictures_path = "C:\Users\mcdonago\Pictures\wallpapers-master\wallpapers-master\Wallpapers\"
$pictures = Get-ChildItem -File -path $pictures_path
$random_num = Get-Random -Maximum $pictures.Count
$new_wallpaper = [string]$pictures[$random_num]
$wallpaper_str = $pictures_path + $new_wallpaper
Write-Host $wallpaper_str
Set-Wallpaper($wallpaper_str)

编辑:还将向能够帮助我实现目标的第三方应用程序开放(按热键立即更改背景)

2 个答案:

答案 0 :(得分:0)

正确的答案是,您不应该尝试使用rundll32.exe来更改墙纸图像,因为最初设计UpdatePerUserSystemParameters并不是为了从rundll32.exe进行调用

Raymond Chen talked about this at length, already, some time ago.

rundll32.exe所需的函数签名为documented,而UpdatePerUserSystemParameters函数不使用该函数签名。

首先,UpdatePerUserSystemParameters函数甚至没有在Windows API文档中正式列出(至少在我撰写本文时尚未列出)。除了这表明该函数不供公共使用的事实之外,没有一种方法可以正式验证其功能签名是否与rundll32.exe兼容。

第二,即使您可以找到函数签名的定义(例如the one in reactos noted by Anders in question 5018828),签名也与rundll32.exe所要求的签名不匹配。

TL; DR:不要使用rundll32.exe来尝试从UpdatePerUserSystemParameters执行user32.dll。这样做不能保证能正常工作,实际上甚至可能会表现出奇怪的行为。 (特别是,我不建议您对其进行多次病理处理,以期以某种方式“更好”地工作。)

答案 1 :(得分:-1)

无法将脚本制作得更快。我受Windows操作系统的限制。