I've set the .theme to use the 1024x768-no-text.jpg as stated in the code section of my first post. This is generally the default screen res, as most of our monitors are this size.
Additionally, I've written up a vbs script to be included in the User login script.
set fso = CreateObject("Scripting.FileSystemObject")
set objWMIService = GetObject("Winmgmts:\\.\root\cimv2")
set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor Where DeviceID = 'DesktopMonitor1'",,0)
for Each objItem in colItems
intH = objItem.ScreenHeight
intW = objItem.ScreenWidth
'Uncomment to echo the screen resolution
file = intW&"x"&intH&"-no-text.jpg"
F = Path&file
if (fso.FileExists(F)) then
set objShell = createObject("Shell.application")
set objFolder = objShell.Namespace(Path)
set objItem = objFolder.ParseName(file)
for Each objVerb in objItem.Verbs
if objVerb.name = "Set as desktop &background" then
That seems to do the trick.
It will find the screen res, then troll through the 'Path' folder to find the 'file'.
If its found, it will then troll through the file Verbs (Context menu) to find the set as desktop background.
If thats found, it will apply it.
If the file isnt found, then the script finishes and remains with the default 1024x768 image.
In theory, the objVerb.DoIt and objItem.InvokeVerb() both do the same thing. However, when used individually, neither work. So I've just called upon them both.
So, by setting the GPO to force the theme instead of a specific image, users are still able to change the background picture to whatever they like. It just wont remember it next time they log in.