Обои для Windows:не только БМП?
-
09-06-2019 - |
Вопрос
Я читал в нескольких местах, что обои рабочего стола можно установить в 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. Монитор процессов и посмотрите, какие разделы реестра затрагиваются, когда вы устанавливаете фон рабочего стола HTML через пользовательский интерфейс.Тогда вам просто нужно будет повторить эти изменения в своем коде.Однако вызов API был бы гораздо предпочтительнее с точки зрения обратной/прямой совместимости.
Другие советы
Я думаю, вам нужно убедиться, что «Активный рабочий стол» включен.
Вы можете попробовать установить HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\ForceActiveDesktopOn
к 1
(найденный здесь).
Я не пробовал, поэтому никаких гарантий.
Хорошо, я нашел ответ на свой вопрос, благодаря egl1044 на Обмен экспертами.По сути, нужно поговорить с объектом IActiveDesktop.Хорошую реализацию этого в VB6 можно найти по адресу VB6 — JPEG в качестве обоев (без конвертации).
Я рекомендую только формат BMP.Не используйте ActiveDesctop, потому что после этого ваш компьютер будет работать медленно.
Подходим ближе: 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 узнать, какой набор значений реестра использовать.