Powershell - получить статус слайд-шоу Win 7

Краткое изложение вопроса: как в Windows 7 с помощью Powershell или немного C# определить, будет ли пользовательская тема оставлять одно изображение или показывать слайд-шоу в фоновом режиме?

(Связанные вопросы, но не совсем одинаковые и без ответа:

Связанный ресурс, но не помог:

)

Вопрос в том, как это звучит, и я не уверен, почему у него столько проблем.

В 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'

в котором есть поля «Перемешать» и «Интервал», но они не меняются, когда мы находимся в пользовательской теме - одно изображение против пользовательской темы - слайд-шоу.

Я уверен, что мне не хватает очень очевидного (я новичок в игре на этом конце Windows и Powershell).. есть мысли?


person Daniel Cazan    schedule 26.04.2013    source источник


Ответы (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 находится в начальном вопросе

person Daniel Cazan    schedule 29.04.2013