因此,我制作了一个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)
编辑:还将向能够帮助我实现目标的第三方应用程序开放(按热键立即更改背景)
答案 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操作系统的限制。