Powershell - изменение фона Windows 7 для изображения с веб-сайта
set-itemproperty -path "HKCU:Control Panel\Desktop" -name WallPaper -value Zapotec.bmp
Я нашел этот код в сети для Powershell для Windows 7, однако я хочу, чтобы обои были настроены на файл, сохраненный на веб-сервере, доступном из браузера. как бы я поступил так?
3 ответа
Я попытался изменить обои с помощью вашей команды, но это не сработало, пока я не запустил: rundll32.exe user32.dll, UpdatePerUserSystemParameters. Даже тогда, это работало только периодически (это известная проблема на Win7).
В любом случае, я написал функцию getfile для PowerShell, которая загружает исходный URL на диск.
function getfile($url, $filename)
{
$wc = New-Object System.Net.WebClient
Register-ObjectEvent -InputObject $wc -EventName DownloadProgressChanged -SourceIdentifier WebClient.DownloadProgressChanged -Action { Write-Progress -Activity "Downloading: $($EventArgs.ProgressPercentage)% Completed" -Status $url -PercentComplete $EventArgs.ProgressPercentage; }
Register-ObjectEvent -InputObject $wc -EventName DownloadFileCompleted -SourceIdentifier WebClient.DownloadFileComplete -Action { Write-Host "Download Complete - $filename"; Unregister-Event -SourceIdentifier WebClient.DownloadProgressChanged; Unregister-Event -SourceIdentifier WebClient.DownloadFileComplete; }
try
{
$wc.DownloadFileAsync($url, $filename)
}
catch [System.Net.WebException]
{
Write-Host("Cannot download $url")
}
finally
{
$wc.Dispose()
}
}
Вы можете найти его и более простую версию здесь вместе с подробным описанием того, что он делает.
Вы должны быть в состоянии изменить свои обои с чем-то вроде этого:
$url = "http://fc05.deviantart.net/fs30/f/2008/062/9/4/Serenity_WPP3___1920_Preview_by_nuaHs.jpg"
$filename = "d:\serenity.jpg"
getfile $url $filename
set-itemproperty -path "HKCU:Control Panel\Desktop" -name WallPaper -value $filename
rundll32.exe user32.dll, UpdatePerUserSystemParameters
Я почти уверен, что ты не сможешь этого сделать. Изображения обоев должны храниться локально. Если щелкнуть правой кнопкой мыши изображение в браузере и "установить в качестве обоев", оно будет скопировано на ваш жесткий диск.
Я думаю, у вас есть 2 варианта.
Пусть Powershell загрузит файл локально и с помощью p/invoke вызовет функцию SystemParametersInfo в User32.dll для установки обоев. API установит его и активирует изменение немедленно. Вот пример этого.
Используйте тему обоев RSS. Вы можете отредактировать файл.theme и указать свой собственный URL-адрес RSS, однако URL-адрес канала должен содержать элемент мультимедиа для изображений, подобных этому. Вы можете скачать этот файл темы и отредактировать его с помощью своего RSS-канала.