Powershell - получить статус слайд-шоу Win 7
Краткое резюме вопроса: в Windows 7, используя Powershell или небольшой C#, как мы можем определить, будет ли пользовательская тема оставлять одно изображение или делать слайд-шоу в фоновом режиме?
(Связанные вопросы, но не совсем то же самое и без ответа:
- Как возобновить слайд-шоу Windows 7 после восстановления обоев по умолчанию (без ответа / отдельная проблема)
- https://stackru.com/questions/10556820/programatically-enable-windows-7-desktop-slideshow (без ответа / отдельная проблема)
- Как я могу обнаружить изменение обоев в результате слайд-шоу в Windows 7? (ответы не работают на победу 7 / отдельный выпуск)
Связанный ресурс, но не помог:
)
Вопрос в том, как это звучит, и я не уверен, почему у него так много проблем.
В Win8 я могу использовать технику, основанную на посте Энди ( скрипт Powershell от ярлыка для смены рабочего стола), чтобы получить исходное изображение. Отсюда и из того, что я могу сказать, слайд-шоу всегда заканчивается в TranscodedWallpaper.jpg, и как только вы переходите к одному изображению, оно переключается на имя изображения. Так что немного об, но я могу сказать, если слайд-шоу включено
В Win7 я могу проверить WallpaperSource
Get-ItemProperty 'HKCU:\Software\Microsoft\Internet Explorer\Desktop\General' WallpaperSource
но это дает мне текущее изображение, только если есть слайд-шоу, и если мы используем "Custom.theme", то
Get-ItemProperty -path 'HKCU:Control Panel\Desktop' -name 'Wallpaper'
каждый раз возвращает TranscodedWallpaper.jpg, даже если там осталось только одно изображение и нет временного интервала. (Независимо от того, если я использую вышеупомянутую команду или сценарий Энди)
Я попытался запустить Process Monitor, чтобы выяснить, что делает Windows, и он немного играет в 'C:\Windows\Globalization\MCT\MCT-US\Wallpaper\desktop.ini', но, похоже, не оставляет следов Я могу использовать. Это помогло мне найти
Get-ItemProperty -path 'HKCU:Control Panel\Personalization\Desktop Slideshow'
у которого есть поля Shuffle и Interval, но они не меняются, когда мы находимся в пользовательской теме - отдельное изображение против пользовательской темы - слайд-шоу.
Я уверен, что мне не хватает очень очевидного (быть новичком в игре на этом конце Windows и Powershell)... какие-нибудь мысли?
1 ответ
Потребовалось время, но я понял это (или нашел решение). Если кто-то еще сталкивается с этим, Win 7 имеет INI-файл:
C:\Users\[...]\AppData\Roaming\Microsoft\Windows\Themes\slideshow.ini
Когда в "слайд-шоу" есть только одно изображение, этот файл становится пустым, поэтому использование.WallpaperSource является правильным фоновым изображением. Когда в слайд-шоу есть несколько изображений, этот файл имеет содержимое (информацию о переходе фона), поэтому, даже если.WallpaperSource выглядит как правильное изображение, оно, вероятно, будет меняться со временем в зависимости от интервала.
Короче говоря, из того, что я вижу (и пока я не столкнусь с ситуацией, которая нарушает это правило, и я вернусь к чертежной доске), чтобы проверить, есть ли у вас слайд-шоу:
$doesFileExist = Test-Path $PATH_TO_THE_INI_FILE
if ($doesFileExist){
$iniContent = Get_Content $PATH_TO_THE_INI_FILE
if ($iniContent){
# This was a slideshow
}
else {
# This does not seem to be a slideshow
}
}
(Это, конечно, только для встроенной функциональности Windows 7, не знаю, как она отреагирует на весь пользовательский код и приложения). И решение Win 8 в первоначальном вопросе