How to set List view as the default FTP view in Windows Explorer?

When I use Windows Explorer to browse a FTP site, it defaults to Tiles view. I need it to default to List view.

I don't see a registry setting, and the standard [Tools -> Folder Options... -> View -> Apply to Folders] apparently has no effect on FTP sites.


For the record, here is a partial workaround tested on W7 SP1 and W10 v1511.

  1. Run the batch script Reset Folder View Settings of All Folders.

  2. Import to registry:

Windows Registry Editor Version 5.00

;My Computer
[HKEY_CURRENT_USER\Software\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\ShellFolder]
"FolderType"=""

;Microsoft FTP Folder
[HKEY_CURRENT_USER\Software\Classes\CLSID\{63da6ec0-2e98-11cf-8d82-444553540000}\ShellFolder]
"FolderType"=""

[HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\AllFolders\Shell\{00000000-0000-0000-0000-000000000000}]
"LogicalViewMode"=dword:00000001
"Mode"=dword:00000000

3a. Run explorer shell:mycomputerfolder and you should see My Computer opened in details view.

3b. Run explorer ftp://your.site.com and it should remain in details view as long as you do not press the site icon in the navigation pane (if present by Add Network Location).
You may create a shortcut with location explorer ftp://your.site.com for convenience.

References:
Windows 8 Desktop Icons in Tile View (configure LogicalViewMode for other view modes)
Configure default folder view for storage connected via MTP (this set all folder view to the same mode)


I wrote this to do it with Autoit: just run the script and your ftp explorer windows should be in list view when first viewed. It's not perfect yet but it has the basic functionality you want. Also requires the library I found here.

Tested on Windows 7 64-bit.

#include "Automating Windows Explorer\Includes\AutomatingWindowsExplorer.au3" ;UDF
#include <Array.au3>

Local $str = "Address: ftp" ;part of visible text in explorer control, unique to ftp, I think...
Local $CheckedWindows[5] ;Keep track of activated windows because I don't have a shell hook for window.created
Local $hExplorer

while 1
    Sleep(2000)    
    $hExplorer = WinWaitActive("[CLASS:CabinetWClass]", $str)

    If not ContainsElement($CheckedWindows,$hExplorer) then ;Only trigger on a *new* window
        setFTPview($str,$hExplorer)
        _ArrayAdd($CheckedWindows,$hExplorer)
    EndIf
    ;delete unused handles to prevent aliases or large array, but I don't know the shell hook for window.closed
    ;alternative is to periodically loop through existing windows and delete non-existing handles (todo)
WEnd

func ContainsElement($arr,$el)
    Local $Bound = UBound($arr)
    For $i=0 to ($Bound -1)
        If $arr[$i] == $el then return True
    Next
    return False
Endfunc

func setFTPview($str,$hExplorer)
    GetIShellBrowser( $hExplorer )
    If Not IsObj( $oIShellBrowser ) Then
        MsgBox( 0, "Automating Windows Explorer", "Could not get an IShellBrowser interface. Terminating." )
    Return
    EndIf
    GetShellInterfaces() ; Get other interfaces, might not be needed
    SetIconView($FVM_LIST)
    Sleep(1000)
endfunc

Addendum: you may need to change line 257 of "AutomatingWindowsExplorer.au3" from If @OSVersion "WIN_XP" Then to If @OSVersion <> "WIN_XP" Then