Показать полную графическую версию : Как получить(узнать) путь откуда взята текущая обоина?
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 (не помню что именно), чтобы в текстовый файл выводились не кракозябры, если имена файлов картинок будут кириллицей. Ну, это мелочи, я думаю.
не работает для папки по умолчанию: C:\Windows\Web\Wallpaper
и картинка с экрана исчезает с задержкой секунд 5-10
Как получить файл картинку на Windows 10?
не работает под Windows 8.1
Что «не работает»? Под какой именно «Windows 8.1»?
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.