Изменить вид проводника определенной папки на большие значки с помощью VBA?

Изменить вид проводника определенной папки на большие значки с помощью VBA?

можно ли изменить вид проводника specific folder C:\набольшие иконкис помощью VBA? Я использовал эту программу RegistryChangesViewдля фиксации изменений в реестре Windows и получил следующие данные:

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 

Я подал заявку позже, но это не дало никакого эффекта (просмотр папок по-прежнему список).
Я думаю, это можно сделать с помощью Windows API (я с ним не знаком).
Заранее, любая помощь приветствуется.

введите описание изображения здесь

решение1

Ключ BagMRUиндексирует сохраненные представления, связывая полностью определенный путь с пронумерованным набором свойств, а также настройки представления, сохраненные в подразделе смежного Bagsключа.

Ключ BagMRU

введите описание изображения здесь

Но нумерация/наименование ключей не фиксировано, а скорее зависит от того, когда папка просматривается впервые. Если пользователь не просматривал папку вИсследователь, не будет сумки. Короче говоря, это не тот способ, которым стоит пытаться это сделать.



Чтобы управлять сохраненным видом папки, папка должна быть открыта вИсследовательдля доступа к представлению и его изменения с использованием различных com-объектов, доступных черезshell.application. ВPowerShell, создайте экземпляр, используя:

$Shell = New-Object -ComObject shell.application

ИспользоватьWindowsметод извлечения открытогоИсследовательокна.ЭКСПЛОРЕРОкно имеет следующие свойства:

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

Свойство Documentсамо по себе является объектом com. Именно через этот объект мы можем get/ setcetain аспекты представления папки.

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

CurrentVIewModeи IconSize— это значения для изменения. Используйте значения из Modeстолбца этой таблицы:

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

Вот пример кода:

$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()

Связанный контент