Показать полную графическую версию : [решено] Смена обоев рабочего стола
Bio_Hazard
14-05-2015, 13:15
Здравствуйте. Хочу сделать, что бы при запуске скрипта на рабочем столе случайным образом менялись обои из папки (например e:\Изображения\Обои для рабочего стола\). Стоит Windows 7 Ultimate. Стандартными средствами реализовано похожее, но там через время, что меня не совсем устраивает. Создавал похожую тему http://forum.oszone.net/showthread.php?p=2507233, но там не ответили. Реально ли это сделать?
http://poshcode.org/491 - Set-Wallpaper
add-type @"
using System;
using System.Runtime.InteropServices;
using Microsoft.Win32;
namespace Wallpaper
{
public enum Style : int
{
Tile, Center, Stretch, NoChange
}
public class Setter {
public const int SetDesktopWallpaper = 20;
public const int UpdateIniFile = 0x01;
public const int SendWinIniChange = 0x02;
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern int SystemParametersInfo (int uAction, int uParam, string lpvParam, int fuWinIni);
public static void SetWallpaper ( string path, Wallpaper.Style style ) {
SystemParametersInfo( SetDesktopWallpaper, 0, path, UpdateIniFile | SendWinIniChange );
RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true);
switch( style )
{
case Style.Stretch :
key.SetValue(@"WallpaperStyle", "2") ;
key.SetValue(@"TileWallpaper", "0") ;
break;
case Style.Center :
key.SetValue(@"WallpaperStyle", "1") ;
key.SetValue(@"TileWallpaper", "0") ;
break;
case Style.Tile :
key.SetValue(@"WallpaperStyle", "1") ;
key.SetValue(@"TileWallpaper", "1") ;
break;
case Style.NoChange :
break;
}
key.Close();
}
}
}
"@
Get-ChildItem "e:\Изображения\Обои для рабочего стола\*.jpg" -Recurse | Get-Random -Count 1 | Foreach {[Wallpaper.Setter]::SetWallpaper( $_.FullName, "NoChange" )}
Set Random Wallpaper on your Desktop using Powershell - https://gallery.technet.microsoft.com/scriptcenter/Set-Random-Wallpaper-Using-e79e4235
Bio_Hazard
14-05-2015, 16:35
Kazun, спасибо! Первый скрипт работает отлично!!!
Есть 2 вопроса:
1) можно ли его подредактировать, что бы он открывал еще *.jpeg *.png *.gif
2) Картинки нужно подкорректировать по размерах или они сами масштабируются?
1. Get-ChildItem -Path "e:\Изображения\Обои для рабочего стола\*" -Include *.jpeg,*.png,*.gif -Recurse
2. Вместо NoChange, доступно еще 3:Stretch(Растянуть),Center(По центру),Tile(Замостить)
https://msdn.microsoft.com/en-us/library/windows/desktop/bb773190(v=vs.85).aspx
[Control Panel\Desktop]
Wallpaper=%WinDir%\web\wallpaper\Windows\img0.jpg
; The path to the wallpaper picture can point to a
; .bmp, .gif, .jpg, .png, or .tif file.
TileWallpaper=0
; 0: The wallpaper picture should not be tiled
; 1: The wallpaper picture should be tiled
WallpaperStyle=2
; 0: The image is centered if TileWallpaper=0 or tiled if TileWallpaper=1
; 2: The image is stretched to fill the screen
; 6: The image is resized to fit the screen while maintaining the aspect
ratio. (Windows 7 and later)
; 10: The image is resized and cropped to fill the screen while maintaining
the aspect ratio. (Windows 7 and later)
Посмотреть, как выглядят различные параметры - http://newdelhipowershellusergroup.blogspot.ru/2013/07/changing-desktop-wallpaper-positions.html
Bio_Hazard
14-05-2015, 20:01
Kazun, Спасибо! Решено.
2) Картинки нужно подкорректировать по размерах или они сами масштабируются? »
При желании можно и масштабировать, и обрезать, и растягивать и много чего ещё. Это касаемо манипуляций над самими изображениями, помимо настроек, указанных коллегой Kazun.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.