VBA를 사용하여 특정 폴더의 탐색기 보기를 큰 아이콘으로 변경하시겠습니까?

VBA를 사용하여 특정 폴더의 탐색기 보기를 큰 아이콘으로 변경하시겠습니까?

specific folder C:\의 탐색기 보기를 다음 으로 변경할 수 있나요?큰 아이콘VBA를 사용하시나요? 나는 이 프로그램을 사용하여 RegistryChangesViewWindows 레지스트리의 변경 사항을 캡처했으며 다음 데이터를 얻었습니다.

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

관련 정보