Windows墙纸:不仅仅是BMP?
我在几个地方读过,可以将桌面墙纸设置为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中找到作为墙纸的一种很好的实现方式(无需转换)。