使用 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。 在电源外壳,使用以下方法创建实例:

$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了解set文件夹视图的某些方面。

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

CurrentVIewModeIconSize是需要修改的值。请使用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()

相关内容