Windows墙纸:不仅仅是BMP?

时间:2020-03-05 18:58:01  来源:igfitidea点击:

我在几个地方读过,可以将桌面墙纸设置为HTML文档。有没有人成功地以编程方式更改它?

VB6的以下代码片段帮助我为BMP设置了东西,但是当我尝试将其用于HTML时,我得到了漂亮的蓝色背景,除此之外没有其他东西。

Dim reg As New StdRegistry

Public Function CurrentWallpaper() As String
    CurrentWallpaper = reg.ValueEx(HKEY_CURRENT_USER, "Control Panel\Desktop", "Wallpaper", REG_SZ, "")
End Function

Public Sub SetWallpaper(cFilename As Variant)
    reg.ClassKey = HKEY_CURRENT_USER
    reg.SectionKey = "Control Panel\Desktop"
    reg.ValueKey = "Wallpaper"
    reg.ValueType = REG_SZ
    reg.Default = ""
    reg.Value = cFilename
End Sub

Public Sub RefreshDesktop()
    Dim oShell As Object
    Set oShell = CreateObject("WScript.Shell")
    oShell.Run "%windir%\System32\RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters", 1, True
End Sub

也许还需要其他一些设置。有任何想法吗?

解决方案

回答

我认为我们需要确保"活动桌面"已打开。

我们可以尝试将" HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ Explorer \ ForceActiveDesktopOn"设置为" 1"(在此处找到)。

我没有尝试过,所以不能保证。

回答

越来越近:http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/w2rkbook/gp.mspx?mfr=true
但是事实证明,我在策略领域陷入了困境。我真正想要的是在用户空间中设置桌面,并保留策略设置。在这里找到了一些有用的东西:http://blogs.msdn.com/coding4fun/archive/2006/10/31/912569.aspx。

但是,这不是最终的解决方案。 HTML桌面的控制仍然遥不可及。
似乎HTML设置存储在HKCU \ Software \ Microsoft \ Internet Explorer \ Desktop \ General中。但是,仅将它们存储在这里似乎还不够。我仍然需要找到让Windows知道要使用哪组注册表值的机制。

回答

我只推荐BMP格式。不要使用ActiveDesctop,因为这之后PC将运行缓慢。

回答

我不确定是否有官方的API,但是如果我们有心事,可以使用Sysinternal的Process Monitor,并查看通过UI设置HTML桌面背景时触摸了哪些注册表项。然后,我们只需要在代码中重复这些编辑即可。但是,就向后/向前兼容性而言,API调用将是更可取的。

回答

好的,感谢Experts Exchange上的egl1044,我已经找到了问题的答案。本质上,必须与IActiveDesktop对象对话。在VB6中,可以在VB6 JPEG中找到作为墙纸的一种很好的实现方式(无需转换)。