Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769

Как программно в Windows XP поменять картинку на рабочем столе, используя файл JPG?

30.07.2023, 20:16. Показов 2326. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

Скажите, пожалуйста, как в Windows XP установить картинку на рабочем столе в формате JPG??? Или никак вообще? Неужели только начиная от Windows Vista или даже Windows 7 можно установить именно JPG-картинку???

В семёрке этот код прекрасно работает:

Модуль:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
' Декларации API...
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoW" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Long, ByVal fuWinIni As Long) As Long
 
' Константы
Private Const SETDESKWALLPAPER = &H14
Private Const UPDATEINIFILE = &H1
 
' Изменение обоев на рабочем столе
Public Function SetWallpaper(ByVal FileName As String) As Boolean
    Dim RetVal As Long
    
    RetVal = SystemParametersInfo(SETDESKWALLPAPER, 0, StrPtr(FileName), UPDATEINIFILE)
    If RetVal = 1 Then SetWallpaper = True
End Function
Форма:
Visual Basic
1
2
3
4
5
Option Explicit
 
Private Sub Command1_Click()
    Print SetWallpaper("C:\WINDOWS\Web\Wallpaper\Nature\img6.jpg")
End Sub
Но в XP почему-то пропускает только BMP-файлы!? Как обойти это ограничение?
1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.07.2023, 20:16
Ответы с готовыми решениями:

Как сохранить файл напрямую в базу данных,не используя путь к файлу на рабочем столе?
У меня есть программа CRUD на C # DevExpress, и я храню свои данные в GridView использую MsSql в качестве базы данных. Выбранную строку в...

Как создать файл на рабочем столе так, что бы работало на Linux и на Windows?
Собственно сабж. Я думаю вопрос сводится к тому, каким образом узнать что за ОС у пользователя и как узнать имя его профиля. ...

Как средствами 1С сменить картинку на рабочем столе
Как средствами 1С сменить картинку на рабочем столе

33
dive
 Аватар для I can
4963 / 4659 / 845
Регистрация: 13.04.2015
Сообщений: 9,850
30.07.2023, 21:21
Цитата Сообщение от HackerVlad Посмотреть сообщение
Но в XP почему-то пропускает только BMP-файлы!? Как обойти это ограничение?
А если тупо поменять расширение картинки на bmp?
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
31.07.2023, 02:05  [ТС]
Цитата Сообщение от I can Посмотреть сообщение
А если тупо поменять расширение картинки на bmp?
Это не прокатит

Добавлено через 25 секунд
Можно конечно сконвертировать файл в BMP и установить BMP но я хотел бы сразу JPG

Добавлено через 51 секунду
Установка сразу JPG работает только для семёрки к сожалению и в MSDN по этому поводу ничего не написано кстати

Добавлено через 3 минуты
Приходит на ум только доделывать эту работу за Microsoft самому с помощью 500 разных APi функций вычислить окно рабочего стола и насильно установить ему новую картинку.

Добавлено через 52 минуты
Само проще всего это конечно конвертировать файл в BMP...

Добавлено через 3 часа 40 минут
Скорее всего надо сконвертировать файл в BMP сохранить его в TMP поменять картинку а потом удалить этот TMP для XP...

Добавлено через 5 минут
Кстати попробовал PNG не поддерживается в семёрке, только JPG...
1
1390 / 846 / 92
Регистрация: 08.02.2017
Сообщений: 3,611
Записей в блоге: 2
31.07.2023, 13:36
У меня на Win 8.1 работает такой способ
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Sub ПоменятьОбои()
    Dim objShellApp, objItem, objFolder, objFile
    Dim colFolderItemVerbs, objFolderItemVerb
    Set objShellApp = CreateObject("Shell.Application")
    Set objFolder = objShellApp.Namespace("Адрес папки")
    Set objFile = objFolder.ParseName("Имя файла.jpg")
    Set colFolderItemVerbs = objFile.Verbs
    For Each objFolderItemVerb In colFolderItemVerbs
        If InStr(1, objFolderItemVerb.Name, "фон") Then
          objFolderItemVerb.DoIt
        End If
    Next
End Sub
1
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
31.07.2023, 13:43  [ТС]
testuser2, а если PNG установить твоим способом то работает тоже?
0
1390 / 846 / 92
Регистрация: 08.02.2017
Сообщений: 3,611
Записей в блоге: 2
31.07.2023, 13:44
HackerVlad, не проверял. Это вызов комманды из контекстного меню файла в проводнике.
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
31.07.2023, 14:21  [ТС]
testuser2, а если PNG установить твоим способом то работает тоже?testuser2, твой код не совсем понятен

можешь объяснить строчку

Visual Basic
1
If InStr(1, objFolderItemVerb.Name, "фон") Then
наталкивает на мысль что ищет файл только который содержит в имени "фон"

можешь написать нормальную функцию с указанием FileName

Добавлено через 33 минуты
testuser2, удивительный код, но он работает! и PNG работает тоже! проверял в семёрке пока только)
0
1390 / 846 / 92
Регистрация: 08.02.2017
Сообщений: 3,611
Записей в блоге: 2
31.07.2023, 14:24
Цитата Сообщение от HackerVlad Посмотреть сообщение
можешь объяснить строчку
Visual Basic
Выделить код
1
If InStr(1, objFolderItemVerb.Name, "фон") Then
Там colFolderItemVerbs это коллекция пунктов контекстного меню для заданного файла. Идет перебор этих пунктов и если в имени пункта содержится "фон", то этот пункт выполняется. У меня этот пункт называется "Сделать фоновым изображением рабочего стола" в 10ке "Сделать фоном рабочег стола" в XP может быть как-то по другому.
1
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
31.07.2023, 14:29  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
в XP может быть как-то по другому
Я проверил в XP у меня не работает код. Но я пока не проверял имена пунктов меню. Да и потом, вдруг у людей будет стоять английская винда!?

Добавлено через 1 минуту
В XP кстати может вообще нет такого пункта в меню... Сейчас проверю...
0
1390 / 846 / 92
Регистрация: 08.02.2017
Сообщений: 3,611
Записей в блоге: 2
31.07.2023, 14:31
Цитата Сообщение от HackerVlad Посмотреть сообщение
Да и потом, вдруг у людей будет стоять английская винда!?
Да не очень универсальны способ, у людей может быть и китайская винда, и люди могут нарукоблудить с контекстным меню, тогда метод не сработает.
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
31.07.2023, 16:16  [ТС]
В XP кстати, я проверил, вообще нет такого пункта в меню! В XP получается только один способ это конвертировать в BMP файл а потом устанавливать с помощью API.

Добавлено через 2 минуты
testuser2, да проще API но к сожалению в майкрософте так и не написали нормального API для смены картинки на рабочем столе

Добавлено через 2 минуты
При установки картинки на рабочем столе, в семёрке например Проводник (explorere.exe) стандартным способом через рабочий стол, делает следующее: берёт картинку любую которую ты указываешь потом конвертирует её в JPG и копирует её в отдельную папку потом устанавливает её. У меня это путь C:\Users\Vlad\AppData\Roaming\Microsoft\ Windows\Themes\TranscodedWallpaper.jpg

Добавлено через 1 час 37 минут
Цитата Сообщение от testuser2 Посмотреть сообщение
Идет перебор этих пунктов
А можно ли как-то найти этот пункт меню не по имени? И какая команда выполняется вообще из этого пункта меню? Можно ли как-то иначе эмулировать эту команду меню, не прибегая к поиску имени пункта меню?
1
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
31.07.2023, 16:26  [ТС]
Я кажется нашёл где в реестре прописывается это название этого пункта меню
Миниатюры
Как программно в Windows XP поменять картинку на рабочем столе, используя файл JPG?  
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
31.07.2023, 16:28  [ТС]
Но я так и не понял какая именно команда выполняется при клике на этот пункт меню!
0
1390 / 846 / 92
Регистрация: 08.02.2017
Сообщений: 3,611
Записей в блоге: 2
31.07.2023, 16:35
HackerVlad, есть прога Command Line Wallpaper Changer, можешь попробовать ее протрассировать каким-нибудь монитором.
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
31.07.2023, 16:49  [ТС]
Я итак примерно знаю как работают сторонние программы, они преобразуют любую картинку в BMP а потом устанавливают через SystemParametersInfo

Добавлено через 26 секунд
Но мне интересно как делает это сам проводник Windows

Добавлено через 52 секунды
Цитата Сообщение от testuser2 Посмотреть сообщение
попробовать ее протрассировать каким-нибудь монитором
Каким именно монитором, посоветуй

Добавлено через 10 минут
За смену картинки на рабочем столе отвечает stobject.dll но это недокументированная хрень
0
1390 / 846 / 92
Регистрация: 08.02.2017
Сообщений: 3,611
Записей в блоге: 2
31.07.2023, 16:57
Цитата Сообщение от HackerVlad Посмотреть сообщение
Каким именно монитором, посоветуй
Dragokas где-то упоминал один. Вроде бы ProcessMonitorom Марка Русинова можно отследить, не пробовал.
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
31.07.2023, 17:22  [ТС]
Я даже ещё до сих пор не понимаю какая именно команда вызывается при клике на пункт меню "&Сделать фоновым изображением рабочего стола" так бы можно было бы как-то её вызвать...

Добавлено через 28 секунд
Но нашёл английское название Set as desktop &background

Добавлено через 28 секунд
Это пункт 417 из stobject.dll

Добавлено через 1 минуту
Здесь нашёл какое-то описание https://file-info.xyz/5ffd811b... l.mui.html

Добавлено через 4 минуты
По сути название этого пункта меню можно найти в реестре, я уже находил но я не уверен, что у всех людей будет именно такой адрес в реестре

Добавлено через 6 минут
Например, для того чтобы выяснить подлинное имя этого пункта меню нужно обратиться в реестр по адресу HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\MuiCache\96\B1A07F78 но это на моём компьютере. На других компьютерах адрес будет другим! Вместо 96 будет что-то другое

Добавлено через 3 минуты
Об этом сказано здесь кстати: Внесение данных в реестр игнорируя часть пути

Добавлено через 1 минуту
То есть если реально найти параметр "@C:\Windows\system32\stobject.dll,-417" то мы реально сможем определить имя в этом контекстном меню, тогда будет этот скрипт работать и на английских виндах и на китайских даже

Добавлено через 5 минут
testuser2, войди пожалуйста по адресу в реестр HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\MuiCache\ и посмотри какая у тебя там будет папка, наверное не 96 как у меня, но дальше всё равно должно быть фиксированное B1A07F78 посмотри, пожалуйста, буду благодарен
0
1390 / 846 / 92
Регистрация: 08.02.2017
Сообщений: 3,611
Записей в блоге: 2
31.07.2023, 17:29
Цитата Сообщение от HackerVlad Посмотреть сообщение
наверное не 96 как у меня
485
1
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
31.07.2023, 19:27  [ТС]
главное что B1A07F78 такое же

Добавлено через 1 минуту
думаю можно тогда обратиться к HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\MuiCache\ потом программным кодом посмотреть список всех папок в этом разделе (там она всё равно будет только одна) и через список таким образом узнать нужно имя, потом зайти туда, потом зайти в B1A07F78 потом найти параметр "@C:\Windows\system32\stobject.dll,-417" и посмотреть его значение, это и будет правильное имя для этого пункта меню, для всех компьютеров наверное

Добавлено через 1 минуту
Вот такой срипт можно создать, он будет универсальным для всех компьютеров на семёрке и выше, для всех языков всех стран

Добавлено через 21 минуту
Вот здесь нашёл твик для добавления этого пункта меню: https://github.com/AmrEldib/Wi... %20Add.reg

Добавлено через 34 секунды
Но до сих пор не понимаю какая именно исполняется команда при вызове этого пункта меню

Добавлено через 17 минут
Цитата Сообщение от testuser2 Посмотреть сообщение
ProcessMonitor
у меня не запускается эта программа от Марка Русиновича не работает и всё даже качал с официального сайта Майкрософт и с неофициальных тоже не работает и всё

Добавлено через 52 минуты
Возможно, существует какая-то команда запуска к explorer.exe которая меняет картинку на рабочем столе

Добавлено через 17 секунд
Но если она и существует то недокументированная

Добавлено через 18 минут
Цитата Сообщение от testuser2 Посмотреть сообщение
"Сделать фоновым изображением рабочего стола"
При вызове этого пункта меню не появляется в системе никаких новых процессов. Я не понимаю что вообще происходит при нажатии на этот пункт меню...
0
dive
 Аватар для I can
4963 / 4659 / 845
Регистрация: 13.04.2015
Сообщений: 9,850
31.07.2023, 19:27
Лучший ответ Сообщение было отмечено HackerVlad как решение

Решение

HackerVlad, попробуй так(сам не могу проверить - у меня десятка)
https://www.vbforums.com/showt... conversion)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.07.2023, 19:27
Помогаю со студенческими работами здесь

Как программно создать иконку на рабочем столе?
Как программным путем создать иконку на рабочем столе?

Как скопировать все *.jpg файлы с рабочего стола в папку на рабочем столе, не зная имени пользователя в пути?
Как скопировать все *.jpg файлы с рабочего стола в папку на рабочем столе, не зная имени пользователя в пути? Читал про...

Как поменять обои на рабочем столе?
есть проблема очень глупая,но которую не могут решить уже несколько человек((на новом буке стоит винда 7,не можем найти где поменять...

Как поменять рисунок на рабочем столе.
Здравствуйте! Помогите, пожалуйста, написать программу, которая меняет рисунок на рабочем столе. Новый рисунок надо, наверное, выбирать...

Как поменять фоновый рисунок на рабочем столе
Как поменять фоновый рисунок на рабочем столе в седьмом windows?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru