¿Cambiar la vista del explorador de una carpeta específica a íconos grandes usando VBA?

¿Cambiar la vista del explorador de una carpeta específica a íconos grandes usando VBA?

¿Es posible cambiar la vista del explorador specific folder C:\a?iconos grandesusando VBA? He utilizado este programa RegistryChangesViewpara capturar cambios en el registro de Windows y obtuve estos datos:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU\0\0]
"MRUListEx"=hex(3):00,00,00,00,01,00,00,00,02,00,00,00,FF,FF,FF,FF 

Lo presenté más tarde pero no tiene ningún efecto (lista fija de vista de carpetas).
Creo que se puede hacer mediante la API de Windows (no estoy familiarizado con ella).
De antemano cualquier ayuda es bienvenida.

ingrese la descripción de la imagen aquí

Respuesta1

La BagMRUclave indexa las vistas guardadas, asociando una ruta completa con una bolsa de propiedades numerada, con la configuración de la vista guardada en una subclave de la Bagsclave adyacente.

Clave BagMRU

ingrese la descripción de la imagen aquí

Pero la numeración/nombramiento de las claves no es fija, sino que depende de cuándo se ve una carpeta por primera vez. Si un usuario no ha visto la carpeta enExplorador, no habrá bolsa. En resumen, ésta no es la manera de intentarlo.



Para manipular la vista guardada de una carpeta, la carpeta debe estar abierta enExploradorpara acceder y modificar la vista utilizando los diversos objetos com disponibles a través deshell.application. EnPotencia Shell, cree una instancia usando:

$Shell = New-Object -ComObject shell.application

Utilizar elWindowsmétodo para recuperar abiertoExploradorventanas. UnExploradorLa ventana tiene las siguientes propiedades:

Application          : System.__ComObject
Parent               : System.__ComObject
Container            : 
Document             : System.__ComObject
TopLevelContainer    : True
Type                 : 
Left                 : 0
Top                  : 0
Width                : 1462
Height               : 625
LocationName         : Windows (C:)
LocationURL          : file:///C:/
Busy                 : False
Name                 : File Explorer
HWND                 : 78776658
FullName             : C:\WINDOWS\explorer.exe
Path                 : C:\WINDOWS\
Visible              : True
StatusBar            : False
StatusText           : 
ToolBar              : 1
MenuBar              : False
FullScreen           : False
ReadyState           : 4
Offline              : False
Silent               : False
RegisterAsBrowser    : False
RegisterAsDropTarget : True
TheaterMode          : False
AddressBar           : True
Resizable            : True

La Documentpropiedad es en sí misma un objeto com. Es a través de este objeto que podemos getciertos setaspectos de la vista de carpetas.

Application     : System.__ComObject
Parent          : 
Folder          : System.__ComObject
FocusedItem     : System.__ComObject
Script          : 
ViewOptions     : 139
CurrentViewMode : 8
GroupBy         : System.Null
FolderFlags     : 1090519041
SortColumns     : prop:System.ItemNameDisplay;
IconSize        : 32

CurrentVIewModey IconSizeson los valores a modificar. Utilice valores de la Modecolumna de esta tabla:

Name        LVM Mode Vid                                    IconSize
----        --- ---- ---                                    --------
Details     1   4    {137E7700-3573-11CF-AE69-08002B2E1262} 16
Tiles       2   6    {65F125E5-7BE1-4810-BA9D-D271C8432CE3} 48
SmIcons     3   1    {089000C0-3573-11CF-AE69-08002B2E1262} 16..31
Icons(M-XL) 3   1    {0057D0E0-3573-11CF-AE69-08002B2E1262} 33..256
List        4   3    {0E1FA5E0-3573-11CF-AE69-08002B2E1262} 16
Content     5   8    {30C2C434-0889-4C8D-985D-A9F71830B0A9} 32

Aquí hay un código de muestra:

$Shell    = New-Object -ComObject shell.application

Function WaitFor-NewWindow ( $CurrentCount )
{
    Do { Sleep -m 50 } Until ( $Shell.Windows().Count -gt $CurrentCount )
}

Function Get-TargetWindow ( $Path )
{
    $OpenWindows = @( $Shell.Windows() )
    If ( $TargetWindow = $OpenWindows | ? { $_.Document.Folder.Self.Path -like $Path } )
    {
        $TargetWindow
    }
    Else
    {
        $Shell.Open( $Target )
        WaitFor-NewWindow $OpenWindows.Count
        @( $Shell.Windows() ) | ? HWND -notIn $OpenWindows.HWND
    }
}

$Target       = 'C:\'
$TargetWindow =  Get-TargetWindow $Target

$TargetWindow.Document.CurrentViewMode = 1
$TargetWindow.Document.IconSize        = 96
$TargetWindow.Quit()

información relacionada