Wallpaper im laufenden Betrieb ändern (inkl. auswahl des Styles)

  • Hallo!

    Mit dieser Funktion ist es möglich das Hintergrundbild im laufenden Betrieb zu ändern.
    Dabei kann der Pfad auf eine beliebige JPG oder BMP Datei sowie der Style (Anzeigeart) übergeben werden.

    Spoiler anzeigen
    [autoit]


    Func Wallpaper($Wallpaper, $Stile)
    ;Set Wallpaper
    ;In XP only bmp files!
    ;$Wallpaper = Full Path and Filename. Leave blank if no Wallpaper
    ;$Stile = Wallpaper Style
    ;Call: Wallpaper("Path\Filename.extention","Stile")
    Select
    Case $Stile="Center"
    $Stile="0"
    $Stile2="0"
    Case $Stile="Fit"
    $Stile="1"
    $Stile2="0"
    Case $Stile="Stretch"
    $Stile="2"
    $Stile2="0"
    Case $Stile="Fill"
    $Stile="-1"
    $Stile2="0"
    Case $Stile="Tile"
    $Stile="0"
    $Stile2="1"
    EndSelect

    [/autoit] [autoit][/autoit] [autoit]

    RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "WallpaperStyle", "REG_SZ", $Stile)
    RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "TileWallpaper", "REG_SZ", $Stile2)
    DllCall("user32.dll", "int", "SystemParametersInfo","uint",20,"uint",0,"str",$Wallpaper,"uint",3)
    EndFunc ;EndFunc Wallpaper

    [/autoit]

    Einmal editiert, zuletzt von veronesi (1. April 2010 um 07:23)

  • Ich habe auch mal sowas geschrieben:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $Wallpaper = @TempDir & "\Wallpaper.bmp" ;Speicherort für die bmp Datei
    $File = FileOpenDialog("Hintergrundbild auswählen", @UserProfileDir & "\Pictures", "Bilder (*.jpg;*.jpeg;*.png;*.gif;*.bmp)")

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()
    $hBitmap = _GDIPlus_BitmapCreateFromFile($File) ;Macht aus dem Bild eine Bitmap
    _GDIPlus_ImageSaveToFile($hBitmap, $Wallpaper) ;Speichert sie in das vorgegebene Verzeichnis
    _GDIPlus_BitmapDispose($hBitmap) ;Bitmap Resource aufräumen
    _GDIPlus_Shutdown()

    [/autoit] [autoit][/autoit] [autoit]

    If Not @error Then ;Jetzt wird die gespeicherte Bitmap als neues Hintergrundbild gesetzt, somit sind auch Dateitypen außer bmp und jpg möglich
    RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "TileWallPaper", "REG_SZ", 0)
    RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "WallpaperStyle", "REG_SZ", -1)
    RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "Wallpaper", "REG_SZ", $Wallpaper)
    DllCall("user32.dll", "int", "SystemParametersInfo", "int", 20, "int", 0, "str", $Wallpaper, "int", BitOR(1, 2))
    EndIf

    [/autoit]


    Nur kann man bei meinem dank GDI+ auch andere Bildformate auswählen (auch unter XP) :P
    Diese GDI+ Funktion könntest du doch übernehmen. ;)

  • Mein neues Skript sieht nun so aus:

    Spoiler anzeigen
    [autoit]

    Func Wallpaper($Wallpaper, $Stile)
    ;Set Wallpaper
    ;In XP only bmp files!
    ;$Wallpaper = Full Path and Filename. Leave blank if no Wallpaper
    ;$Stile = Wallpaper Style
    ;Call: Wallpaper("Path\Filename.extention","Stile")
    ;Don't miss to include the GDIPlus.au3 (#include <GDIPlus.au3>)

    [/autoit] [autoit][/autoit] [autoit]

    Select
    Case $Stile="Center"
    $Stile="0"
    $Stile2="0"
    Case $Stile="Fit"
    $Stile="1"
    $Stile2="0"
    Case $Stile="Stretch"
    $Stile="2"
    $Stile2="0"
    Case $Stile="Fill"
    $Stile="-1"
    $Stile2="0"
    Case $Stile="Tile"
    $Stile="0"
    $Stile2="1"
    EndSelect

    Local $TempWallpaper = @TempDir & "\Wallpaper.bmp"
    _GDIPlus_Startup()
    $hBitmap = _GDIPlus_BitmapCreateFromFile($Wallpaper) ;Converts Image to Bitmap
    _GDIPlus_ImageSaveToFile($hBitmap, $TempWallpaper) ;Save in temp directory
    _GDIPlus_BitmapDispose($hBitmap) ;Release Bitmap Resource
    _GDIPlus_Shutdown()

    [/autoit] [autoit][/autoit] [autoit]

    RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "WallpaperStyle", "REG_SZ", $Stile)
    RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "TileWallpaper", "REG_SZ", $Stile2)
    RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "Wallpaper", "REG_SZ", $TempWallpaper)
    DllCall("user32.dll", "int", "SystemParametersInfo","uint",20,"uint",0,"str",$TempWallpaper,"uint",3)
    EndFunc ;EndFunc Wallpaper

    [/autoit]

    Vielen Dank für Deine Hilfe!
    Funktioniert wunderbar!

    Grüsse
    Veronesi

    Einmal editiert, zuletzt von veronesi (1. April 2010 um 14:06)