0

I'm trying to figure out how to write a batch file I could use on multiple computers to set the background. I've tried a few suggestions I saw in some other searches, but besides that I'm not really sure how to do this. Anyone have any suggestions? Thanks!

Raistlin
  • 167
  • 8
  • http://stackoverflow.com/questions/7779491/changing-wallpaper-with-a-batch-file-on-program-close-possible – user3719066 Apr 05 '15 at 21:52
  • I saw a similar question in my searching, and now I have the batch file saying it completed successfully, but the background isn't actually changed... – Raistlin Apr 05 '15 at 22:11

2 Answers2

0

The line to use is:

@%SystemRoot%\System32\reg.exe add "HKCU\Control Panel\Desktop" /v Wallpaper /t REG_SZ /d "C:\Windows\winnt.bmp" /f

Run in a command prompt window reg add /? for details about this command.

I'm really surprised that you could not find that by yourself because there is already Changing Wallpaper with a batch file, on program close. Possible? And a search on Stack Overflow with [batch-file] wallpaper returns 41 results.

Community
  • 1
  • 1
Mofi
  • 46,139
  • 17
  • 80
  • 143
  • Ah, I think I was missing the "@%SystemRoot%\System32\" at the start. Now the window that pops up asks for confirmation and says it was completed successfully; however, it doesn't actually refresh the wallpaper. Is there something else I need to get it to update? – Raistlin Apr 05 '15 at 22:07
  • `@` just hides the command on execution and `%SystemRoot%\System32` is usually not necessary as this directory is by default first directory in environment variable `PATH` also on Windows XP. Changing the Windows registry value does of course not result in a refresh of the Windows desktop. But that should not bother you as the wallpaper is shown automatically after next Windows login by user. As a wallpaper is a user setting, I do not really like what you want to do and therefore do not help further. Sorry. – Mofi Apr 05 '15 at 22:22
  • If you like to post you a code in vbscript with HTA tested on windows 7 32 bits (UAC Disabled). Just edit your post and add those tags vbscript and HTA – Hackoo Apr 05 '15 at 22:33
  • Mofi, I'm trying to change the background on school computers to a Big Brother is Watching You image, it's for a 1984 project. Hackoo, that would be great. I can edit it now. – Raistlin Apr 05 '15 at 22:58
0

This HTA is tested under Windows 7 32 bits with UAC Disabled. just give a try on your XP and let me know if it will work or not for you. Good Luck !

ChangeWallpaper.hta

<html>
<head>
<title>Application pour changer le fond d'écran dans Windows 7 © Hackoo © 2013</title>
<HTA:APPLICATION
APPLICATIONNAME="Application pour changer le fond d'écran dans Windows 7"
ID="Application pour changer le fond d'écran dans Windows 7"
ICON="Explorer.exe"
BORDER="dialog"
INNERBORDER="no"
MAXIMIZEBUTTON="No"
SCROLL="no"
VERSION="1.0"/>
<style>
Label
{
color : #123456;
font-family : "Courrier New";
}
BODY {background-color:DarkOrange;}
input.button {  background-color : #EFEFEF;
color : #000000; cursor:hand;
font-size: 11px; font-family: Verdana, Arial, Helvetica, sans-serif; }
}
.alt2, .alt2Active
{
background: #E1E4F2;
color: #000000;
}    
</style>
</head>
<META HTTP-EQUIV="MSThemeCompatible" CONTENT="YES">
<script language="VBScript">
Option Explicit
Dim Titre,fso,MyFolder,TabFolder,DossierCourant,DossierCourantIMAGE
Titre = "Application pour changer le fond d'écran dans Windows 7 © Hackoo © 2013"
set fso = CreateObject("Scripting.FileSystemObject")
MyFolder = fso.GetAbsolutePathName(".")
TabFolder = Split(MyFolder,"\")
DossierCourant = TabFolder(UBound(TabFolder))
DossierCourantIMAGE = DossierCourant&"_IMAGE_FOND"
If Not fso.FolderExists(DossierCourantIMAGE) Then
    CreateFolder(DossierCourantIMAGE)
End if 
'*****************************************************************
Sub Window_OnLoad
    CenterWindow 640,200
End Sub
'*****************************************************************
Sub CenterWindow(x,y)
    Dim iLeft,itop
    window.resizeTo x, y
    iLeft = window.screen.availWidth/2 - x/2
    itop = window.screen.availHeight/2 - y/2
    window.moveTo ileft, itop
End Sub 
'*****************************************************************
Sub OnClickButtonCancel()
    Window.Close
End Sub
'*****************************************************************
Function DblQuote(strIn)
    DblQuote = Chr(34) & strIn & Chr(34)
End Function
'*****************************************************************
Sub CreateFolder(strPath)
    set fso = CreateObject("Scripting.FileSystemObject")
    If strPath <> "" Then 
        If Not fso.FolderExists(fso.GetParentFolderName(strPath)) then Call CreateFolder(fso.GetParentFolderName(strPath))
        fso.CreateFolder(strPath)
    End If
End Sub 
'*****************************************************************
SUB ChangeFondEcran()
    Dim MyNewWallPaper,NomMyNewWallPaper,NewWallPaperName,WshShell,MonFondEcranBDR,CheminAncienWallpaper,i,MonTab,Destination
    Set WshShell = CreateObject("WScript.Shell")
    MonFondEcranBDR = "HKEY_CURRENT_USER\Control Panel\desktop\Wallpaper"
    CheminAncienWallpaper = WshShell.RegRead(MonFondEcranBDR)
    MsgBox CheminAncienWallpaper,64,Titre
'Copie de Sauvegarde de l'ancien Wallpaper
    Call CopyFile(CheminAncienWallpaper,DossierCourantIMAGE)
    MyNewWallPaper = fichecran.Value
    NomMyNewWallPaper = Split(MyNewWallPaper,"\")
    NewWallPaperName = NomMyNewWallPaper(UBound(NomMyNewWallPaper))
    'MsgBox MyNewWallPaper,64,Titre
    If MyNewWallPaper <> "" Then
        MonTab = Split(CheminAncienWallpaper,"\")
        Destination = ""
        For i = LBound(MonTab) To UBound(MonTab) - 1
            Destination = Destination + MonTab(i) + "\"
        Next
        'MsgBox Destination,64,Titre
'Supprimer l'ancien Wallpaper
        Call DeleteMyOldFile(CheminAncienWallpaper)
        Call CopyFile(MyNewWallPaper,Destination)
        Call Renommer(Destination & NewWallPaperName,MonTab(UBound(MonTab)))
        RefreshExplorer()
    End if
    Set WshShell = Nothing 
END Sub
'*****************************************************************
Function CopyFile(Source,Destination)
    Dim  FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    If FSO.FolderExists(Destination) Then
        If Right(Destination,1) <> "\" Then
            Destination = Destination & "\"
        End if
        FSO.GetFile(Source).Copy Destination & FSO.GetFileName(Source),True
        MsgBox "Copie du fond d'écran : " & DblQuote(FSO.GetFileName(Source)) & " dans le dossier " & DblQuote(Destination),64,Titre
    Else 
        MsgBox DblQuote(Destination) & " n'existe pas !",48,Titre
    End If
End Function
'*****************************************************************
'Fonction pour écrire le résultat dans un fichier texte
Sub WriteLog(strText,LogFile)
    Dim fs,ts 
    Const ForAppending = 8
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set ts = fs.OpenTextFile(LogFile,ForAppending,True)
    ts.WriteLine strText
    ts.Close
End Sub
'*****************************************************************
Function DeleteMyOldFile(Source)
    Dim  FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    If FSO.FileExists(Source) Then
        FSO.GetFile(Source).Delete False
    End If
End Function
'******************************************************************
Function Renommer(Fichier1,Fichier2)
    Dim Ws,Command,Execution
    Set Ws = CreateObject("WScript.Shell")
    Command = "Cmd /C Ren "&Fichier1&","&Fichier2&""
    Execution = Ws.Run(Command,0,True)
End Function
'******************************************************************
Sub Kill(Process)
Dim Ws,Command,Execution
    Set Ws = CreateObject("WScript.Shell")
    Command = "cmd /c Taskkill /F /IM "&Process&""
    Execution = Ws.Run(Command,0,True)
End Sub
'*****************************************************************
Sub Start(Process)
Dim Ws,Command,Execution
    Set Ws = CreateObject("WScript.Shell")
    Command = "cmd /c Start "&Process&""
    Execution = Ws.Run(Command,0,True)
End Sub
'*****************************************************************
Sub RefreshExplorer()
     Kill("Explorer.exe")
     Start("Explorer.exe")
End Sub
</script>
<center>
<B>Veuillez choisir l'image pour changer le fond d'écran </B><br><br>
<input type="file" size="50" name="fichecran" style="font-weight: bold; id="file1" />
<br><br><br>
<input type="Submit" style="width: 180px" style="font-weight: bold; name="OK" id="OK" value="Changer le fond d'écran" onclick="ChangeFondEcran()">
<input type="button" style="width: 100px" style="font-weight: bold; name="Cancel" id="Cancel" value="Sortir" onclick="OnClickButtonCancel"><br><br>
</body>
</html>
Hackoo
  • 18,337
  • 3
  • 40
  • 70