Mastering the default Explorer views for Windows XP and 2003

I finally mastered the Windows Explorer views under Windows XP and 2003!

The following script is fully documented.

Enjoy!


‘================================================================================

‘ This script sets the Details view for all folders.

‘ Release 1.3 on 22nd April 2009.
‘ Created by Jeremy@jhouseconsulting.com on 6th February 2007.

‘ On a Per-User basis, folder views are managed under two registry keys:
‘ 1) Network Folders – HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell
‘ 2) Local Folders – HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam
‘ Just so you don’t get confused let me explain that drive mappings are considered
‘ to be local folders. Network folders are UNC paths.

‘ How to configure the default Folder Type template for users
‘ Create the AllFolders key under the following key:
‘ – HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\Bags\AllFolders
‘ – Then create a Shell key under that.
‘ – Set the following values…
‘ – DWORD value WFlags set to 0
‘ – DWORD value Mode set to 4
‘ – String value vid set to “{137E7700-3573-11CF-AE69-08002B2E1262}”

‘ Note the following table can be used to configure the above values (WFlags
‘ should always be 0)
‘ View Mode vid
‘ Icons (medium) 1 {0057D0E0-3573-11CF-AE69-08002B2E1262}
‘ Icons (small) 2 {0057D0E0-3573-11CF-AE69-08002B2E1262}
‘ List 3 {0E1FA5E0-3573-11CF-AE69-08002B2E1262}
‘ Details 4 {137E7700-3573-11CF-AE69-08002B2E1262}
‘ Thumbnail 5 {8BEBB290-52D0-11D0-B7F4-00C04FD706EC}
‘ Tiles 6 {65F125E5-7BE1-4810-BA9D-D271C8432CE3}
‘ Filmstrip 7 {8EEFA624-D1E9-445B-94B7-74FBCE2EA11A}

‘ Note that if you don’t want to show the status bar in the default folder view
‘ create a Status DWORD value and set it to 0

‘ Rather than creating this individually for each user you may choose to create
‘ it globally by setting the exact same values in the HKEY_LOCAL_MACHINE registry
‘ hive instead. The ShellNoRoam key does not exist in the HKLM hive by default.

‘ This script will also set/reset the view of any existing cached folders. To do
‘ this it uses WMI to enumerate all the registry subkeys under the following keys:
‘ – “HKCU\Software\Microsoft\Windows\ShellNoRoam\Bags”
‘ – “HKCU\Software\Microsoft\Windows\Shell\Bags”

‘ It then uses WMI to create/modify the Mode and Vid values under the following
‘ keys, where Nodeslot_number is the enumerated subkey:
‘ – “HKCU\Software\Microsoft\Windows\ShellNoRoam\Bags\Nodeslot_number\Shell”
‘ – “HKCU\Software\Microsoft\Windows\Shell\Bags\Nodeslot_number\Shell”

‘ You can choose to leave existing folder views as they are by setting the
‘ blnChangeExistingFolders value to False. This allows users to change the view
‘ as they wish, without it being overwritten next time they log in.

‘ Note that you must close and reopen Windows Explorer to see the changes.

‘ Usage:
‘ cscript.exe //nologo SetExplorerViews.vbs

‘ This script was based on…
‘ 1) A kixtart script written by Rick Mack.
‘ 2) A blog by Nicholas Dille from Sepago found here:
‘ http://blogs.sepago.de/nicholas/2009/02/17/preserving-windows-explorer-folder-views-in-roaming-profiles/
‘ 3) An article by “Snakefoot” found here:
‘ http://smallvoid.com/article/winnt-default-folder-view.html

‘================================================================================

Option Explicit

Dim objShell, objReg, strComputer, strKeyRoot, strKeyPath, strValueName, strValue
Dim Return, blnDebug, arrSubKeys, subkey, i, strSystemRoot, strCommandLine, strView
Dim arrKeys, item, intMode, strVid, blnChangeExistingFolders

Const HKEY_CURRENT_USER = &H80000001

blnDebug = False

arrKeys = Array(“ShellNoRoam”,”Shell”)

blnChangeExistingFolders = True

‘ Set strView to either medium icons, small icons, list, details, thumbnail, tiles
‘ or filmstrip
strView = “Details”

‘ Folder View Mode Values under Bags\Nodeslot_number\Shell. All values are DWORD
Select Case lcase(strView)
Case “medium icons” ‘The view should display medium-size icons
intMode = 1
strVid = “{0057D0E0-3573-11CF-AE69-08002B2E1262}”
Case “small icons” ‘The view should display small icons
intMode = 2
strVid = “{0057D0E0-3573-11CF-AE69-08002B2E1262}”
Case “list” ‘Object names are displayed in a list view
intMode = 3
strVid = “{0E1FA5E0-3573-11CF-AE69-08002B2E1262}”
Case “details” ‘Object names and other selected information, such as the size or date last updated, are shown
intMode = 4
strVid = “{137E7700-3573-11CF-AE69-08002B2E1262}”
Case “thumbnail” ‘The view should display thumbnail icons
intMode = 5
strVid = “{8BEBB290-52D0-11D0-B7F4-00C04FD706EC}”
Case “tiles” ‘The view should display large icons
intMode = 6
strVid = “{65F125E5-7BE1-4810-BA9D-D271C8432CE3}”
Case “filmstrip” ‘The view should display icons in a filmstrip format
intMode = 7
strVid = “{8EEFA624-D1E9-445B-94B7-74FBCE2EA11A}”
End Select

‘ FFlags Values under Bags\Nodeslot_number\Shell. All values are DWORD
‘ – Autoarrange_Off_Align_to_Grid_Off = 220
‘ – Autoarrange_On = 221
‘ – Autoarrange_off_Align_to_Grid_On = 224
‘ – Autoarrange_On_Align_to_Grid_On = 225

‘ Sort Values under Bags\Nodeslot_number\Shell. All values are DWORD
‘ – Sort_by_Name = 0
‘ – Sort_by_Size = 1
‘ – Sort_by_Type = 2
‘ – Sort_By_Modified = 3

strComputer = “.”

Set objShell = WScript.CreateObject(“WScript.Shell”)
Set objReg = GetObject(“winmgmts:{impersonationLevel=impersonate}!\\” & _
strComputer & “\root\default:StdRegProv”)

strKeyRoot = “HKCU\”
strKeyPath = “Software\Microsoft\Windows\”

‘ New profiles will not contain the key structure, so we need to create them.
For Each item in arrKeys
If NOT RegKeyExists(strKeyRoot & strKeyPath & item) Then
Return = objReg.CreateKey (HKEY_CURRENT_USER,strKeyPath & item)
If blnDebug Then
If (Return = 0) And (Err.Number = 0) Then
Wscript.Echo “Create the ” & strKeyPath & item & ” key.”
Else
Wscript.Echo “Could not create the ” & strKeyPath & item & ” key.”
End If
End If
End If
If NOT RegKeyExists(strKeyRoot & strKeyPath & item & “\Bags”) Then
Return = objReg.CreateKey (HKEY_CURRENT_USER,strKeyPath & item & “\Bags”)
If blnDebug Then
If (Return = 0) And (Err.Number = 0) Then
Wscript.Echo “Create the ” & strKeyPath & item & “\Bags key.”
Else
Wscript.Echo “Could not create the ” & strKeyPath & item & “\Bags key.”
End If
End If
End If
If NOT RegKeyExists(strKeyRoot & strKeyPath & item & “\BagMRU”) Then
Return = objReg.CreateKey (HKEY_CURRENT_USER,strKeyPath & item & “\BagMRU”)
If blnDebug Then
If (Return = 0) And (Err.Number = 0) Then
Wscript.Echo “Create the ” & strKeyPath & item & “\BagMRU key.”
Else
Wscript.Echo “Could not create the ” & strKeyPath & item & “\BagMRU key.”
End If
End If
End If
Next

‘ The ShellNoRoam fix as per the Sepago article.
strValueName = “”
strValue = “%COMPUTERNAME%”
Return = objReg.SetExpandedStringValue (HKEY_CURRENT_USER,strKeyPath & “ShellNoRoam”,strValueName,strValue)
If blnDebug Then
If (Return = 0) And (Err.Number = 0) Then
Wscript.Echo “SetExpandedStringValue succeeded”
Else
Wscript.Echo “SetExpandedStringValue failed. Error = ” & Err.Number
End If
End If

‘ Create the AllFolders key, and values within.
Return = objReg.CreateKey (HKEY_CURRENT_USER,strKeyPath & “ShellNoRoam\Bags\AllFolders”)
If blnDebug Then
If (Return = 0) And (Err.Number = 0) Then
Wscript.Echo “Create the ” & strKeyPath & “ShellNoRoam” & “\Bags\AllFolders key.”
Else
Wscript.Echo “Could not create the ” & strKeyPath & “ShellNoRoam\Bags\AllFolders key.”
End If
End If
Return = objReg.CreateKey (HKEY_CURRENT_USER,strKeyPath & “ShellNoRoam\Bags\AllFolders\Shell”)
If blnDebug Then
If (Return = 0) And (Err.Number = 0) Then
Wscript.Echo “Create the ” & strKeyPath & “ShellNoRoam\Bags\AllFolders\Shell key.”
Else
Wscript.Echo “Could not create the ” & strKeyPath & “ShellNoRoam\Bags\AllFolders\Shell key.”
End If
End If
Return = objReg.SetDWORDValue (HKEY_CURRENT_USER,strKeyPath & “ShellNoRoam\Bags\AllFolders\Shell”,”WFlags”,0)
If blnDebug Then
If (Return = 0) And (Err.Number = 0) Then
Wscript.Echo “SetDWORDValue succeeded”
Else
Wscript.Echo “SetDWORDValue failed. Error = ” & Err.Number
End If
End If
Return = objReg.SetDWORDValue (HKEY_CURRENT_USER,strKeyPath & “ShellNoRoam\Bags\AllFolders\Shell”,”Mode”,intMode)
If blnDebug Then
If (Return = 0) And (Err.Number = 0) Then
Wscript.Echo “SetDWORDValue succeeded”
Else
Wscript.Echo “SetDWORDValue failed. Error = ” & Err.Number
End If
End If
Return = objReg.SetStringValue (HKEY_CURRENT_USER,strKeyPath & “ShellNoRoam\Bags\AllFolders\Shell”,”Vid”,strVid)
If blnDebug Then
If (Return = 0) And (Err.Number = 0) Then
Wscript.Echo “SetStringValue succeeded”
Else
Wscript.Echo “SetStringValue failed. Error = ” & Err.Number
End If
End If

‘ Enumerate and change existing folder values.
If blnChangeExistingFolders Then
For Each item in arrKeys
Return = objReg.EnumKey (HKEY_CURRENT_USER, strKeyPath & item & “\Bags”, arrSubKeys)
If blnDebug Then
If (Return = 0) And (Err.Number = 0) Then
Wscript.Echo “EnumKey succeeded”
Else
Wscript.Echo “EnumKey failed. Error = ” & Err.Number
End If
End If
If blnDebug Then
‘ The next three lines for debugging purposes only to display the contents of
‘ the array elements.
For i = 0 to UBound(arrSubKeys)
Wscript.echo “Array element ” & i & ” contains a value of ” & arrSubKeys(i)
Next
End If
If IsArray(arrSubKeys) Then
For Each subkey In arrSubKeys
Return = objReg.SetDWORDValue (HKEY_CURRENT_USER,strKeyPath & item & “\Bags\” & subkey & “\” & “Shell”,”Mode”,intMode)
If blnDebug Then
If (Return = 0) And (Err.Number = 0) Then
Wscript.Echo “SetDWORDValue succeeded”
Else
Wscript.Echo “SetDWORDValue failed. Error = ” & Err.Number
End If
End If
Return = objReg.SetStringValue (HKEY_CURRENT_USER,strKeyPath & item & “\Bags\” & subkey & “\” & “Shell”,”Vid”,strVid)
If blnDebug Then
If (Return = 0) And (Err.Number = 0) Then
Wscript.Echo “SetStringValue succeeded”
Else
Wscript.Echo “SetStringValue failed. Error = ” & Err.Number
End If
End If
Next
End If
Next
End If

Set objShell = Nothing
Set objReg = Nothing

WScript.Quit(0)

Function RegKeyExists(ByVal sRegKey)
‘ Returns True or False based on the existence of a registry key.
Dim sDescription, oShell
Set oShell = CreateObject(“WScript.Shell”)
RegKeyExists = True
sRegKey = Trim (sRegKey)
If Not Right(sRegKey, 1) = “\” Then
sRegKey = sRegKey & “\”
End If
On Error Resume Next
oShell.RegRead “HKEYNotAKey\”
sDescription = Replace(Err.Description, “HKEYNotAKey\”, “”)
Err.Clear
oShell.RegRead sRegKey
RegKeyExists = sDescription <> Replace(Err.Description, sRegKey, “”)
On Error Goto 0
Set oShell = Nothing
End Function

Jeremy Saunders

Jeremy Saunders

Delivering customer success through tech: IT Infrastructure | Citrix | End User Computing | Platform Engineering | DevOps | Full Stack Developer | Technical Architect | Improvisor | Aspiring Comedian | Midlife Adventurer at J House Consulting
Jeremy Saunders is the Problem Terminator; the MacGyver of IT. Views and Intellectual Property (IP) published on this site belong to Jeremy. Please refer to the About page for more information about Jeremy.