Войти

Показать полную графическую версию : Как получить(узнать) путь откуда взята текущая обоина?


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

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

madmasles
07-09-2010, 13:45
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

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

Dark Ange1
17-03-2011, 16:44
Вобщем, потратил на поиск решения не один день, тоже нужно было удалять картинки, которые не нравились :biggrin: Вобщем, как-то случайно нарыл путь, ковыряясь в реестре:yahoo: Ну и спасибо Oszone (http://www.oszone.net), мне тут (http://forum.oszone.net/thread-184844.html) помогли с пакетным файлом, который я "доработал напильником" под свои нужды. Вобщем, я изгольнулся так - написал батник, конвертировал его в EXE Этой прогой (http://download.cnet.com/Bat-To-Exe-Converter/3000-2069_4-10555897.html), потом при помощи любого (Я пользовался Windows 7 manager (http://rutracker.org/forum/tracker.php)) редактора контекстного меню создал пункт, ссылающийся на созданный экзешник. Пункт нужно создавать для контекстного меню рабочего стола. Ну, это мелочи. Главное - это батник (хоть оно и 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 (обе папки должны быть предварительно созданы). Типа вдруг передумаешь потом :biggrin:

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 (не помню что именно), чтобы в текстовый файл выводились не кракозябры, если имена файлов картинок будут кириллицей. Ну, это мелочи, я думаю.

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

Valvet
24-01-2017, 17:26
Как получить файл картинку на Windows 10?

ramax
28-02-2017, 18:07
не работает под Windows 8.1

Iska
28-02-2017, 19:20
Что «не работает»? Под какой именно «Windows 8.1»?

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

furr7325@vk
03-12-2017, 13:24
https://youtu.be/tmaVEk-zhRE вот может поможет.




© OSzone.net 2001-2012