0

问题的快速总结:在 Windows 7 中,使用 Powershell 或一点 C#,我们如何判断自定义主题是要在后台留下单个图像还是幻灯片放映?

(相关问题但不完全相同且未回答:

相关资源,但没有帮助:

)

问题几乎就是它听起来的样子,我不确定它为什么会遇到这么多麻烦。

在 Win8 中,我可以使用基于 Andy 帖子的技术(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 的这一端玩的新手).. 有什么想法吗?

4

1 回答 1

2

花了一段时间,但我想通了(或想出了一个解决方案)。如果其他人遇到此问题,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 解决方案已在最初的问题中提出

于 2013-04-29T18:54:38.710 回答