使用 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鍵的子鍵中。

包MRU密鑰

在此輸入影像描述

但按鍵的編號/命名不是固定的,而是取決於首次查看資料夾的時間。如果用戶尚未查看過該資料夾探險家,不會有袋子。簡而言之,這不是嘗試的方法。



若要操作資料夾的已儲存視圖,必須在下列位置開啟該資料夾探險家使用可用的各種 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()

相關內容