我在几个地方读到桌面壁纸可以设置为 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

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

有帮助吗?

解决方案

我不确定是否有官方 API,但如果你愿意,你可以使用 Sysinternal 的 过程监控器 并查看当您通过 UI 设置 HTML 桌面背景时会触及哪些注册表项。然后您只需要在代码中重复这些编辑即可。然而,就向后/向前兼容性而言,API 调用要好得多。

其他提示

我认为您需要确保“活动桌面”已打开。

您可以尝试设置 HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\ForceActiveDesktopOn1 (成立 这里).

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

好的,我已经找到了问题的答案,感谢egl1044 专家交流. 。本质上,我们必须与 IActiveDesktop 对象对话。VB6 中的一个很好的实现可以在以下位置找到: VB6 - JPEG 作为壁纸(无需转换).

我推荐只使用 BMP 格式。不要使用ActiveDetop,因为此后你的电脑运行速度会变慢。

越来越近: 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 知道要使用哪组注册表值的机制。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top