Desktop.ini 폴더 아이콘 - 배치 파일 - VBA

Desktop.ini 폴더 아이콘 - 배치 파일 - VBA

문제는 그다지 복잡하지 않고, 조금 복잡해서 설명하기가 어렵습니다. 최대한 명확하게 설명하도록 최선을 다하겠습니다.

폴더를 끌어다 놓을 수 있는 배치 파일을 다운로드하면 새 폴더 아이콘이 설정됩니다. Desktop.ini 파일을 생성하고 필요한 파일 및 폴더 속성을 설정하여 이를 수행합니다.

배치 파일의 코드는 다음과 같습니다.

If [%1] == [] goto :eof  
ECHO [.ShellClassInfo] >%1\desktop.in  
ECHO IconResource=J:\PRESETS\AUTOHOTKEY SCRIPTS\VSA\ICONS\GREEN\folderico-green.ico,0 >>%1\desktop.in  
move %1\desktop.in %1\desktop.ini  
attrib +S +H %1\desktop.ini  
attrib +R %1  

이것이 작동하더라도 마지막에 Explorer 캐시를 새로 고치는 줄을 추가했습니다.

start "C:\Windows\System32" ie4uinit.exe -show  

이 배치 파일을 VBA에서 프로그래밍 방식으로 실행하고 싶었기 때문에 끌어서 놓기 기능을 사용할 수 없었습니다. 그래서 먼저 VBA가 모든 폴더에 배치 파일을 생성하고 해당 폴더의 경로를 사용하여 실행되도록 모든 "%1\"을 "%~dp0\"으로 변경했습니다.

VBA 함수는 클라이언트 잔액이 0보다 큰지 확인합니다. 그렇다면 클라이언트 폴더에 녹색 아이콘이 표시됩니다. 빚이 있는 경우 빨간색 폴더 아이콘이 표시됩니다.

VBA 함수는 클라이언트 폴더에 이전에 표시된 대로 .bat 파일을 생성하고 실행합니다. 그런 다음 .bat 파일이 삭제됩니다.

VBA 함수는 다음과 같습니다.

Sub ChangeClientFolderIcon(ByVal ClientName As String, ByVal TotalALL As Currency)  

Dim substrings() As String  
Dim NewClientName As String  
substrings = Split(ClientName)  

NewClientName = substrings(2) & "_" & substrings(0) & "_" & substrings(1)  

Dim fso As New FileSystemObject  
Dim f As Folder, sf As Folder  

    Set f = fso.GetFolder("M:\DIGITAL_ALBUMS\")  
    For Each sf In f.SubFolders  

           If sf.name = NewClientName Then  

                Dim MyFile As Variant  
                Dim fnum As Variant  

                MyFile = sf & "\cmdcode.bat"  
                fnum = FreeFile()  
                Open MyFile For Output As #fnum  

                    If TotalALL >= 0 Then    

                        Print #fnum, "If [%~dp0] == [] goto :eof"  
                        Print #fnum, "ECHO [.ShellClassInfo] >%~dp0\desktop.in"  

                    If TotalALL >= 0 Then  
                        Print #fnum, "ECHO IconResource=J:\PRESETS\AUTOHOTKEY SCRIPTS\VSA\ICONS\GREEN\folderico-green.ico,0 >>%~dp0\desktop.in"  
                    Else    
                        Print #fnum, "ECHO IconResource=J:\PRESETS\AUTOHOTKEY SCRIPTS\VSA\ICONS\RED\folderico-red.ico,0 >>%~dp0\desktop.in"  
                    End If  

                    Print #fnum, "move %~dp0\desktop.in %~dp0\desktop.ini"  
                    Print #fnum, "attrib +S +H %~dp0\desktop.ini"  
                    Print #fnum, "attrib +R %~dp0"  
                    Print #fnum, "start ""C:\Windows\System32"" ie4uinit.exe -show"  

                Close #fnum  

                ' Run bat-file:  
                Shell MyFile, vbNormalFocus  

                ' optional, remove bat-file:  

                'Sleep for 5 seconds  
                Application.Wait (Now + TimeValue("0:00:05"))  
                Kill sf & "\cmdcode.bat"  

                Exit For  
          End If  
    Next  
End Sub   

문제는 다음과 같습니다.

배치 파일을 클라이언트 폴더에 수동으로 복사하고 수동으로 실행하면 제대로 작동합니다. Desktop.ini 파일이 생성되고 약 20초가 지나면 폴더 아이콘이 변경됩니다.

하지만 동일한 파일을 생성하여 VBA 기능으로 실행하면, Desktop.ini 파일은 생성되지만 폴더 아이콘은 바뀌지 않습니다.

내 질문이 명확해지기를 바랍니다.

답변1

나는 그것을 알아.

작성 중인 배치 파일은 Desktop.ini 파일을 시스템 및 숨김(+S +H)으로 설정하고 있습니다. 그런 다음 폴더 자체를 읽기 전용(+R)으로 설정합니다. 사용자 정의 .ini 파일이 작동하려면 폴더도 시스템으로 설정되어야 합니다.

따라서 이것을 변경한 후:

Print #fnum, "attrib +R %~dp0"

이에:

Print #fnum, "attrib +R +S %~dp0"

모두 완벽하게 작동합니다!

관련 정보