Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Как получить(узнать) путь откуда взята текущая обоина?

Ответить
Настройки темы
Как получить(узнать) путь откуда взята текущая обоина?

Новый участник


Сообщения: 42
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: Dark Ange1
Дата: 17-03-2011
Описание: Добавил путь, где хранится обоина
Я хочу добавить в контекстное меню возможность удаления текущего изображения рабочего стола при включенной функции "Показ слайдов". Может кто знает хотя бы как узнать путь текущей обоины? Не тот, что записан в реестре HKEY_CURRENT_USER\Control Panel \Desktop\ Dword Wallpaper, а реальный, откуда эта обоина взята?

Вот, где хранится путь к файлу, который является источником для текущей обоины HKCU\Software\Microsoft\Internet Explorer\Desktop\General ключ dword WallpaperSource

Отправлено: 13:04, 07-09-2010

 

Аватара для madmasles

Ветеран


Сообщения: 815
Благодарности: 353

Профиль | Отправить PM | Цитировать


Dark Ange1,
Попробуйте так:
Код: Выделить весь код
$sKeyName = 'HKEY_CURRENT_USER\Control Panel\Desktop'
;Для Windows XP:
$sValue_1 = 'Wallpaper'
$sValue_2 = 'ConvertedWallpaper'
MsgBox(0, '', RegRead($sKeyName, $sValue_1) & @CRLF & RegRead($sKeyName, $sValue_2))
;Для Windows 7:
MsgBox(0, '', RegRead($sKeyName, $sValue_1))
Удалить и восстановить обратно обои у меня так получилось:
Код: Выделить весь код
#RequireAdmin
;Проверял только на Windows XP и Windows 7
$iDel = _DelWallpaper()
If $iDel = -2 Then
    MsgBox(0, '', 'Не поддерживается')
    Exit
ElseIf $iDel = 1 Then
    Sleep(3000)
    $iSet = _SetWallpaper()
EndIf

Func _DelWallpaper()
    If @OSVersion <> 'WIN_XP' And @OSVersion <> 'WIN_7' Then
        Return SetError(1, 0, -2)
    EndIf
    Local Const $SPIF_UPDATEINIFILE = 0x0001
    Local Const $SPIF_SENDCHANGE = 0x0002
    Local Const $SPI_SETDESKWALLPAPER = 0x0014
    Local $hImage, $sCLSID, $tBuffer
    $tBuffer = DllStructCreate("char Text[""]")
    DllStructSetData($tBuffer, "Text", "")
    RegWrite('HKCU\Control Panel\Desktop', 'Wallpaper', 'REG_SZ', "")
    DllCall("User32.dll", "int", "SystemParametersInfo", "int", $SPI_SETDESKWALLPAPER, "int", 0, _
            "ptr", DllStructGetPtr($tBuffer), "int", BitOR($SPIF_UPDATEINIFILE, $SPIF_SENDCHANGE))
    Return 1
EndFunc   ;==>_DelWallpaper

Func _SetWallpaper()
    Local Const $SPIF_UPDATEINIFILE = 0x0001
    Local Const $SPIF_SENDCHANGE = 0x0002
    Local Const $SPI_SETDESKWALLPAPER = 0x0014
    Local $hImage, $sCLSID, $tBuffer, $sTemp_File
    If @OSVersion = 'WIN_XP' Then
        $sTemp_File = @UserProfileDir & "\Local Settings\Application Data\Microsoft\Wallpaper1.bmp"
    ElseIf @OSVersion = 'WIN_7' Then
        $sTemp_File = @AppDataDir & "\Microsoft\Windows\Themes\TranscodedWallpaper.jpg"
    Else
        Return SetError(1, 0, -2)
    EndIf

    If Not FileExists($sTemp_File) Then Return SetError(1, 0, -1)
    $tBuffer = DllStructCreate("char Text[" & StringLen($sTemp_File) + 1 & "]")
    DllStructSetData($tBuffer, "Text", $sTemp_File)
    RegWrite('HKCU\Control Panel\Desktop', 'Wallpaper', 'REG_SZ', $sTemp_File)
    DllCall("User32.dll", "int", "SystemParametersInfo", "int", $SPI_SETDESKWALLPAPER, "int", 0, _
            "ptr", DllStructGetPtr($tBuffer), "int", BitOR($SPIF_UPDATEINIFILE, $SPIF_SENDCHANGE))
    Return 1
EndFunc   ;==>_SetWallpaper

Последний раз редактировалось madmasles, 07-09-2010 в 18:38.


Отправлено: 13:45, 07-09-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


Это конечно, хорошо, а если обои расположены, например, на D:\Обои? и в реестре вроде нигде нет указания, какой именно файл из D:\Обои в данную минуту используется...

Отправлено: 13:09, 08-09-2010 | #3


Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вобщем, потратил на поиск решения не один день, тоже нужно было удалять картинки, которые не нравились Вобщем, как-то случайно нарыл путь, ковыряясь в реестре Ну и спасибо Oszone, мне тут помогли с пакетным файлом, который я "доработал напильником" под свои нужды. Вобщем, я изгольнулся так - написал батник, конвертировал его в EXE Этой прогой, потом при помощи любого (Я пользовался Windows 7 manager) редактора контекстного меню создал пункт, ссылающийся на созданный экзешник. Пункт нужно создавать для контекстного меню рабочего стола. Ну, это мелочи. Главное - это батник (хоть оно и CMD, хе-хе)
Вот мой вариант:
1) Для удаления
Код: Выделить весь код
chcp 1251
For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKCU\Software\Microsoft\Internet Explorer\Desktop\General"^|Find /I "WallpaperSource"`) Do Set Wallpath=%%~J
del "%wallpath%"
2) Для копирования в C:\Temp\wallmove.txt пути текущей обоины (включая имя файла) и перемещения файла картинки в папку C:\Walls (обе папки должны быть предварительно созданы). Типа вдруг передумаешь потом
Код: Выделить весь код
For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKCU\Software\Microsoft\Internet Explorer\Desktop\General"^|Find /I "WallpaperSource"`) Do Echo %%J>C:\Temp\wallmove.txt
For /F "tokens=* delims=" %%i In (C:\Temp\Wallmove.txt) Do move /y "%%i" C:\walls\
ЗЫ. Возможно, в начало кода придется добавить CHCP 866 или CHCP 1251 (не помню что именно), чтобы в текстовый файл выводились не кракозябры, если имена файлов картинок будут кириллицей. Ну, это мелочи, я думаю.

Последний раз редактировалось Dark Ange1, 17-03-2011 в 16:50.


Отправлено: 16:44, 17-03-2011 | #4


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


не работает для папки по умолчанию: C:\Windows\Web\Wallpaper
и картинка с экрана исчезает с задержкой секунд 5-10

Отправлено: 07:15, 09-12-2011 | #5


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Как получить файл картинку на Windows 10?

Отправлено: 17:26, 24-01-2017 | #6


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


не работает под Windows 8.1

Отправлено: 18:07, 28-02-2017 | #7


Ветеран


Contributor


Сообщения: 20871
Благодарности: 5971

Профиль | Отправить PM | Цитировать


Что «не работает»? Под какой именно «Windows 8.1»?

Отправлено: 19:20, 28-02-2017 | #8


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Win 10 pro x64 15063
Индусы всё сломали. Удаляет картинку по адресу %userprofile%\AppData\Local\Temp\*.png
На superuser это обсуждали, там решение через vbscript и часть уже не работает.

Отправлено: 13:53, 15-10-2017 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Как получить(узнать) путь откуда взята текущая обоина?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - как получить путь из ярлыка ? mitiya Скриптовые языки администрирования Windows 2 08-07-2009 15:09
CMD/BAT - [решено] Как получить путь к профилю другого пользователя ? mitiya Скриптовые языки администрирования Windows 6 27-04-2009 03:18
Прочее - как узнать откуда идут сетевые запросы -Serega- Сетевые технологии 12 04-03-2009 09:24
Как узнать путь в реестре Rigiy Хочу все знать 4 18-01-2007 02:50
Как получить путь к файлу в виде строки на Visual Basic .NET Igor Laptev Программирование и базы данных 1 14-10-2003 00:50




 
Переход