// // This program changes the current desktop location on Windows XP. // Written by Zsolt N Perry (zsnp@juno.com) in May 2023, Pensacola, Fla. // ////////////////////////////////////////////////////////////////// // Specify absolute path of new desktop folder: DESKTOP = "C:\\Documents and Settings\\Administrator\\Desktop"; DESKTOP = "D:\\DESKTOP"; ////////////////////////////////////////////////////////////////// REG_NTVER = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\CurrentVersion"; REG_DESKTOP = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\Desktop"; REG_DESKTOPU = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\\Desktop"; REG_ICON_ORDER = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Bags\\1\\Desktop"; REG_HOMEPATH = "HKEY_CURRENT_USER\\Volatile Environment\\HOMEPATH"; REG_HOMEDRIVE = "HKEY_CURRENT_USER\\Volatile Environment\\HOMEDRIVE"; QUICK_LAUNCH_FOLDER = "C:\\Documents and Settings\\Administrator\\Application Data\\Microsoft\\Internet Explorer\\Quick Launch"; SHOW_DESKTOP_FILE = QUICK_LAUNCH_FOLDER + "\\Show Desktop.scf"; ////////////////////////////////////////////////////////////////// // Get handles to the file system and the Windows registry. try { WshShell = new ActiveXObject("WScript.Shell"); FSO = new ActiveXObject("Scripting.FileSystemObject"); } catch (e) { EXIT("Error: Access denied.\n\nThis program needs access to the file system\nand the Windows registry."); } // Check for Windows XP NOXP = 0; try { WinVer = WshShell.RegRead(REG_NTVER); NOXP = (typeof(WinVer) == 'undefined' || isNaN(WinVer) || WinVer == '' || WinVer == null || WinVer < 5 || WinVer >= 6) ? 1 : 0; } catch (e) {} if (NOXP) EXIT("This program requires Windows XP."); // Check to make sure that new desktop location exists. try { DRIVE_LETTER = DESKTOP.substr(0, 2); if (DRIVE_LETTER.charAt(1) != ":") EXIT("Error: Missing drive letter - " + DESKTOP); if (!FSO.DriveExists(DRIVE_LETTER)) EXIT("Error: Drive not ready - " + DRIVE_LETTER); if (!FSO.FolderExists(DESKTOP)) EXIT("Error: Folder doesn't exist - " + DESKTOP); } catch (e) {} // Proceed to change desktop folder. try { // Save current arrangement of desktop icons. RUN("RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters"); OpenStatusWindow("PLEASE WAIT"); CURDESKTOP = WshShell.RegRead(REG_DESKTOP); HOMEDRIVE = WshShell.RegRead(REG_HOMEDRIVE); HOMEPATH = WshShell.RegRead(REG_HOMEPATH); HOMEDIR = HOMEDRIVE + HOMEPATH + "\\"; FILE_ICON_CACHE1 = HOMEDIR + "Local Settings\\Application Data\\IconCache.db"; FILE_ICON_CACHE2 = HOMEDIR + "AppData\\LocalIconCache.db"; // If the new desktop is the same as the current one, then we exit. if (CURDESKTOP == DESKTOP) { SAY("Same desktop."); WAIT(1500); EXIT(); } // Save current settings and icon locations in a hidden // registry file on the old desktop. WAIT(500); REGISTRY_FILE = CURDESKTOP + "\\ICONS.REG"; RUN('REGEDIT /E "' + REGISTRY_FILE + '" ' + REG_ICON_ORDER); WAIT(300); SetFileAttr(REGISTRY_FILE, 34); // Make file hidden. // Update desktop folder in the registry. WshShell.RegWrite(REG_DESKTOP, DESKTOP, "REG_SZ"); WshShell.RegWrite(REG_DESKTOPU, DESKTOP, "REG_SZ"); WAIT(500); // Terminate desktop. RUN("TASKKILL.EXE /F /IM EXPLORER.EXE"); // Load previously saved icon locations if available. REGISTRY_FILE = DESKTOP + "\\ICONS.REG"; RUN('REGEDIT /S "' + REGISTRY_FILE + '"'); WAIT(200); DeleteFile(REGISTRY_FILE); // Erase icon cache DeleteFile(FILE_ICON_CACHE1); DeleteFile(FILE_ICON_CACHE2); // Restart desktop. WAIT(1000); RUN("EXPLORER.EXE"); } catch (e) { EXIT("An error occurred during the desktop folder change operation."); } SAY("Your New, Desktop is ready!"); // SUCCESS! EXIT(); ////////////////////////////////////////////////////////////////// function WAIT(MS) { WScript.Sleep(MS); } function ALERT(MSG) { WScript.Echo(MSG); } function EXIT(MSG) { CloseStatusWindow(); ShowDesktop(); if (typeof(MSG) != 'undefined') ALERT(MSG); WScript.Quit(0); } function DeleteFile(F) { try { if (FSO.FileExists(F)) FSO.DeleteFile(F, 1); } catch (e) {} } function SetFileAttr(F, A) { try { var FILE = FSO.GetFile(F); FILE.Attributes = A; } catch (e) {} } function RUN(CMD) { try { WshShell.Run(CMD, 0); } catch (e) {} } function SAY(TXT) { try { var VOICE = WScript.CreateObject("SAPI.SpVoice"); VOICE.Volume = 60; VOICE.Rate = 2; VOICE.Speak(TXT); } catch (e) {} } function PRESS(K) { WAIT(100); try { WshShell.SendKeys(K); } catch (e) {} } function PRESS_SHIFT(K) { PRESS("+" + K); } function PRESS_CTRL(K) { PRESS("^" + K); } function PRESS_ALT(K) { PRESS("%" + K); } function WINFOCUS(W) { WshShell.AppActivate(W); } ////////////////////////////////////////////////////////////////// // Opens a small browser window to display status messages. // Usage: OpenStatusWindow(STRING) // function OpenStatusWindow(MSG) { var WINDOW_WIDTH = 380; var WINDOW_HEIGHT = 200; try { MSIE = WScript.CreateObject("InternetExplorer.Application"); MSIE.Visible = 0; MSIE.ToolBar = 0; MSIE.StatusBar = 0; MSIE.FullScreen = 1; MSIE.Navigate("about:blank"); MSIE.RegisterAsDropTarget = 0; WAIT(100); MSIE.Height = WINDOW_HEIGHT; MSIE.Width = WINDOW_WIDTH; MSIE.Top = 200; MSIE.Left = ((MSIE.document.parentWindow.screen.availWidth - WINDOW_WIDTH) >> 1) - 5; WAIT(50); MSIE.Document.open(); MSIE.Document.write("StatusWin
" + MSG); MSIE.Document.close(); MSIE.Visible = 1; } catch (e) {} } function CloseStatusWindow() { try { MSIE.Quit(); } catch (e) {} } ////////////////////////////////////////////////////////////////// // Creates and overwrites a text file. // Usage: CreateFile(FILENAME, STRING, [UNICODE]) // function CreateFile(FILENAME, CONTENT, UNICODE) { var FILE, FORMAT = (UNICODE | 0) ? 1 : 0; try { FILE = FSO.CreateTextFile(FILENAME, 1, FORMAT); FILE.Write(CONTENT); FILE.Close(); } catch (e) {} } ////////////////////////////////////////////////////////////////// function ShowDesktop() { try { // Show desktop, if we can... if (FSO.FolderExists(QUICK_LAUNCH_FOLDER)) { // Fix the "Show Desktop" icon in Quick Launch in case it's broken. CreateFile(SHOW_DESKTOP_FILE, "[Shell]\r\nCommand=2\r\nIconFile=explorer.exe,3\r\n[Taskbar]\r\nCommand=ToggleDesktop\r\n"); WAIT(100); RUN('CMD.EXE /C "' + SHOW_DESKTOP_FILE + '"'); } } catch (e) {} }