For lack of a better name.
If you have multiple monitors then you may have wanted a different image to appear on each monitor. This lets you do that. This used to requre a third party program to work but now it's a stand alone. I finally got around to figuring out various aspects of GDI+. I never would have done it without the helpful people on this forum!
Requires the latest AutoIt beta.
Only tested on Windows7 x64 on a two monitor setup. If you have more than two then I require you to try this and tell me how it did. Now!
[update: 01/24/2014] -- Now based on Model View Controller design pattern. I did this to hopefully ease any future updates. Also added a feature to change the desktop color. Now images can be dropped onto the gui. Also, uses GDI+ to resize and display the chosen images on the gui. This is faster and looks better than GuiCtrlCreatePic.
[update: 01/17/2014] -- Now uses GDI+ to handle the resizing, etc! Credit given to various people inside the script.
Here is the zip containing everything that is needed: Desktop Background Maker.zip
Downloads: 97
Known issue: If you select your images and then change the desktop color this makes the images go blank on the gui. Go figure. I think it may be because the gui is repainted. I tried to lock it and disable the gui but no joy. Edit: Ok, the next version will remedy this.
Here is just the main code for those interested.
#AutoIt3Wrapper_Version=B
#autoit3wrapper_jump_to_first_error=y
#AutoIt3Wrapper_Run_AU3Check=n
#AutoIt3Wrapper_Run_Tidy=n
Opt("MustDeclareVars", 1)
#include "AutoItObject.au3"
#include "Error Handler.au3"
#include <Misc.au3>
#include <Model.au3>
#include <GUI.au3>
#include <View.au3>
HotKeySet("{ESC}", _exit)
_main()
Func _main()
_AutoItObject_StartUp()
Const $model = _model()
Const $view = _view()
$view.SetTitle($model.ProgramName)
Const $monitor_count = $model.MonitorCount()
Select
Case $monitor_count > 2
$view.ResizeWidth(($monitor_count * 205) + 10)
Case $monitor_count < 2
MsgBox($MB_TOPMOST, $model.ProgramName, "Two or more monitors are required.")
Exit
EndSelect
$view.MoveX($view.GetXPosition())
$view.SetDesktopColor($model.DesktopColor())
$view.InitPicClicks($monitor_count)
$view.UpdateStatus("Welcome.")
$view.ShowNormal()
Local $message = ''
Do
$message = GUIGetMsg()
Switch $message
Case 0, $gui_event_minimize, $gui_event_mousemove, $gui_event_primarydown, $gui_event_primaryup, _
$gui_event_secondarydown, $gui_event_secondaryup, $gui_event_restore
Case $GUI_EVENT_CLOSE
$view.UpdateStatus("Bye Bye!")
_AutoItObject_Shutdown()
Sleep(300)
Exit
Case $hb_append
$view.UpdateStatus("Working...")
Local $timer = TimerInit()
$model.CreateWallpaper($monitor_count, $view.PicClicks)
If @error Then Return SetError(1, @error, False)
$model.SetWallpaperTile()
$model.SetWallpaper(@ScriptDir & "\Desktop Background.jpg")
FileDelete(@ScriptDir & "\Desktop Background.jpg")
$view.UpdateStatus("Finished in " & Round(TimerDiff($timer) / 1000, 2) & " seconds.")
Case $hb_desktop_color
Local $color = _ChooseColor()
Switch $color <> -1
Case True
$model.SetDesktopColor($color)
$view.SetDesktopColor($model.DesktopColor())
EndSwitch
Case $gui_event_dropped
For $pic_click In $view.PicClicks
Switch @GUI_DropId
Case $pic_click.PicClick
$pic_click.Draw(@GUI_DragFile)
ExitLoop
EndSwitch
Next
Case Else
For $pic_click In $view.PicClicks
Switch $message
Case $pic_click.PicClick
Local $selected_image = $pic_click.SelectImage()
Switch $selected_image <> False
Case True
$pic_click.Draw($selected_image)
EndSwitch
ExitLoop
EndSwitch
Next
EndSwitch
Until False
EndFunc
Func _exit()
Exit
EndFunc