스크립팅 가능한 셸 개체

Windows Shell은 Microsoft Visual Basic 및 Microsoft JScript(ECMA 262 언어 사양과 호환됨) 및 Microsoft VBScript(Visual Basic Scripting Edition)와 같은 스크립팅 언어로 셸을 프로그래밍할 수 있는 강력한 자동화 개체 집합을 제공합니다. 이러한 개체를 사용하여 Shell의 많은 기능 및 대화 상자에 액세스할 수 있습니다. 예를 들어 파일 시스템에 액세스하고, 프로그램을 시작하고, 시스템 설정을 변경할 수 있습니다.

이 섹션에서는 스크립팅 가능한 Shell 개체를 소개합니다.

셸 버전

대부분의 Shell 개체는 셸 버전 4.71 에서 사용할 수 있게 되었습니다. 다른 버전은 버전 5.00 이상에서 사용할 수 있습니다. 버전 5.00은 Windows 2000에서 사용할 수 있게 되었습니다. 다음 표에서는 개체를 사용할 수 있게 된 Shell 버전 아래의 각 Shell 개체를 나열합니다.

버전 4.71 버전 5.00
폴더 DIDiskQuotaUser
FolderItemVerb DiskQuotaControl
FolderItemVerbs Folder2
FolderItem
ShellFolderView FolderItems
ShellUIHelper FolderItems2
ShellWindows IShellDispatch2
WebViewFolderContents IShellLinkDual2
ShellFolderItem
ShellFolderViewOC
ShellLinkObject

 

셸 개체 인스턴스화

초기 바인딩을 사용하여 Visual Basic 애플리케이션에서 Shell 개체를 인스턴스화하려면 프로젝트의 다음 라이브러리에 대한 참조를 추가합니다.

  • MICROSOFT 인터넷 컨트롤(SHDocVw)
  • Microsoft Shell 컨트롤 및 자동화(Shell32)

지연 바인딩

지연 바인딩을 사용하여 많은 Shell 개체를 인스턴스화할 수도 있습니다. 이 방법은 Visual Basic 애플리케이션 및 스크립트에서 작동합니다. 다음 예제에서는 JScript에서 Shell 개체를 인스턴스화하는 방법을 보여줍니다.

<SCRIPT LANGUAGE="JScript">
<!--
    function fnCreateShell()    
    {
        // Instantiate the Shell object and invoke its FileRun method.
        var oShell = new ActiveXObject("shell.application");
        oshell.FileRun;
    }
-->
</SCRIPT>

다음 예제에서는 VBScript에서 Folder 개체를 인스턴스화하는 방법을 보여줍니다.

<SCRIPT LANGUAGE="VBScript">
<!--
    function fnCreateFolder()
        dim oShell    
        dim oFolder
        dim sDir

        sDir = "C:\SomePath" 
        set oShell = CreateObject("shell.application")
        set oFolder = oShell.NameSpace(sDir)  
    end function
-->  
</SCRIPT>

앞의 예제에서 sDirFolder 개체의 경로입니다. ShellSpecialFolderConstants 열거형 값은 스크립트에서 사용할 수 없습니다.

각 Shell 개체에 대한 ProgID는 다음 표에 나와 있습니다.

개체 ProgID
DIDiskQuotaUser Microsoft.DiskQuota.1
DiskQuotaControl 늦게 바인딩할 수 없음
폴더 셸을. Shell_Application.NameSpace("...")
Folder2 셸을. Shell_Application.NameSpace("...")
FolderItem 셸을. Shell_Application.NameSpace("..."). Self 또는 Folder.Items.Item 또는 Folder.ParseName
FolderItems Folder.Items
FolderItems2 Folder.Items
FolderItemVerb Shell.NameSpace("..."). Self.Verbs.Item()
FolderItemVerbs FolderItem.Verbs 또는 Shell.NameSpace("..."). Self.Verbs
IShellDispatch2 셸을. Shell_Application
IShellLinkDual2 Shell.NameSpace("..."). Self.GetLink 또는 Shell.NameSpace("..."). Items(). GetLink
셸을. Shell_Application
ShellFolderItem Shell.NameSpace("..."). Self 또는 Shell.NameSpace("..."). Items()
ShellFolderView 늦게 바인딩할 수 없음
ShellFolderViewOC 늦게 바인딩할 수 없음
ShellLinkObject Shell.NameSpace("..."). Self.GetLink 또는 Shell.NameSpace("..."). Items(). GetLink
ShellUIHelper 늦게 바인딩할 수 없음
ShellWindows 셸을. Shell_Windows 또는 ShellWindows._NewEnum
WebViewFolderContents 늦게 바인딩할 수 없음

 

HTML OBJECT 요소

OBJECT 요소를 사용하여 HTML 페이지에서 Shell 개체를 인스턴스화할 수도 있습니다. 이렇게 하려면 OBJECT 요소의 ID 특성을 스크립트에서 사용할 변수 이름으로 설정하고 등록된 번호(CLASSID)를 사용하여 개체를 식별합니다. 다음 HTML은 OBJECT 요소를 사용하여 ShellFolderItem 개체의 instance 만듭니다.

<OBJECT ID="oShFolderItem" 
    NAME="Shell Folder Item Object"
    CLASSID="clsid:2fe352ea-fd1f-11d2-b1f4-00c04f8eeb3e">
</OBJECT>

다음 표에는 각 Shell 개체와 해당 CLASSID가 나열되어 있습니다.

Shell 개체 Classid
DIDiskQuotaUser 7988B571-EC89-11cf-9C00-00AA00A14F56
DiskQuotaControl 7988B571-EC89-11cf-9C00-00AA00A14F56
폴더 BBCBDE60-C3FF-11CE-8350-44455354000
Folder2 f0d2d8ef-3890-11d2-bf8b-00c04fb93661
FolderItem 744129E0-CBE5-11CE-8350-44455354000
FolderItems 744129E0-CBE5-11CE-8350-44455354000
FolderItems2 C94F0AD0-F363-11d2-A327-00C04F8EEC7F
FolderItemVerb 08EC3E00-50B0-11CF-960C-0080C7F4EE85
FolderItemVerbs 1F8352C0-50B0-11CF-960C-0080C7F4EE85
IShellDispatch2 A4C6892C-3BA9-11d2-9DEA-00C04FB16162
IShellLinkDual2 317EE249-F12E-11d2-B1E4-00C04F8EEB3E
13709620-C279-11CE-A49E-444553540000
ShellFolderItem 2fe352ea-fd1f-11d2-b1f4-00c04f8eeb3e
ShellFolderView 62112AA1-EBE4-11cf-A5FB-0020AFE7292D
ShellFolderViewOC 4a3df050-23bd-11d2-939f-00a0c91eedba
ShellLinkObject 11219420-1768-11d1-95BE-00609797EA4F
ShellUIHelper 64AB4BB7-111E-11D1-8F79-00C04FC2FBE1
ShellWindows 9BA05972-F6A8-11CF-A442-00A0C90A8F39
WebViewFolderContents 1820FED0-473E-11D0-A96C-00C04FD705A2

 

Shell 개체

Shell 개체는 Shell의 개체를 나타냅니다. Shell 개체에서 노출하는 메서드를 사용하여 다음을 수행할 수 있습니다.

  • 폴더를 열고 탐색하고 찾습니다.
  • 열린 창을 최소화, 복원, 계단식 또는 타일로 연결합니다.
  • 제어판 애플리케이션을 시작합니다.
  • 시스템 대화 상자를 표시합니다.

사용자는 시작 메뉴와 작업 표시줄의 바로 가기 메뉴에서 액세스하는 명령에 가장 익숙할 것입니다. 사용자가 작업 표시줄을 마우스 오른쪽 단추로 클릭하면 작업 표시줄의 바로 가기 메뉴가 나타납니다. 다음 HTML 애플리케이션(HTA)은 많은 Shell 개체의 메서드를 구현하는 단추가 있는 시작 페이지를 생성합니다. 이러한 방법 중 일부는 시작 메뉴와 작업 표시줄의 바로 가기 메뉴에서 기능을 구현합니다.

<HTML>
<HEAD>
    <TITLE>Start Page</TITLE>
    
    <OBJECT ID="oShell"
        CLASSID="clsid:13709620-C279-11CE-A49E-444553540000">
    </OBJECT>
    
    <STYLE>
        INPUT {width: 200} 
    </STYLE>  
    
    <SCRIPT LANGUAGE="VBScript">
    <!--
        function fnStart(sMethod)
            select case sMethod
              case 0    
                  'Minimizes all windows on the desktop
                oshell.Shell_MinimizeAll
              case 1  
                  'Displays the Run dialog box
                oshell.FileRun
              case 2  
                  'Displays the Shut Down Windows dialog box
                oshell.Shell_ShutdownWindows
              case 3  
                  'Displays the Find dialog box
                oshell.Shell_FindFilesr
              case 4  
                  'Displays the Date/Time dialog box
                oshell.Shell_SetTime 
              case 5  
                  'Displays the Internet Properties dialog box
                oshell.Shell_ControlPanelItem "INETCPL.cpl"
              case 6  
                  'Explores the My Documents folder
                oshell.Shell_Explore "C:\My Documents"
              case 7  
                  'Enables user to select folder from Program Files
                oshell.Shell_BrowseForFolder 0, "My Programs", 0, "C:\Program Files" 
              case 8  
                  'Opens the Favorites folder
                oshell.Shell_Open "C:\WINDOWS\Favorites"
              case 9  
                  'Displays the Taskbar Properties dialog box
                oshell.Shell_TrayProperties
            end select  
        end function      
    -->
    </SCRIPT>
</HEAD>

<BODY>
    <H1>Start...</H1>
    <INPUT type="button" value="Edit Taskbar Properties" onclick="fnStart(9)"><br>
    <INPUT type="button" value="Open Favorites Folder" onclick="fnStart(8)"><br>
    <INPUT type="button" value="Browse Program Files" onclick="fnStart(7)"><br>
    <INPUT type="button" value="Explore My Documents" onclick="fnStart(6)"><br>
    <INPUT type="button" value="Modify Internet Properties" onclick="fnStart(5)"><br>
    <INPUT type="button" value="Set System Time" onclick="fnStart(4)"><br>
    <INPUT type="button" value="Find a File or Folder" onclick="fnStart(3)"><br>
    <INPUT type="button" value="Shut Down Windows" onclick="fnStart(2)"><br>
    <INPUT type="button" value="Run" onclick="fnStart(1)">     
    <INPUT type="button" value="Minimize All Windows" onclick="fnStart(0)">     
</BODY>
</HTML>

보안

애플리케이션으로 HTA는 웹 페이지와 다른 보안 모델에서 실행됩니다. Shell 개체의 기능을 구현하는 웹 페이지와 상호 작용하려면 사용자가 페이지를 보고 있는 보안 영역에 대해 안전한 옵션으로 표시되지 않은 ActiveX 컨트롤 초기화 및 스크립트 를 사용하도록 설정해야 합니다.

폴더 개체

Folder 개체는 Shell 폴더를 나타냅니다. Folder 개체에서 노출하는 메서드를 사용하여 다음을 수행할 수 있습니다.

  • 폴더에 대한 정보를 가져옵니다.
  • 하위 폴더를 만듭니다.
  • 파일 개체를 복사하여 폴더로 이동합니다.

FolderItem 개체는 Shell 폴더의 항목을 나타냅니다. 해당 속성을 사용하면 항목에 대한 정보를 검색할 수 있습니다. 이 개체에서 노출하는 메서드를 사용하여 항목의 동사를 실행하거나 항목의 FolderItemVerbs 개체에 대한 정보를 검색할 수 있습니다.

FolderItems 개체는 Shell 폴더의 항목 컬렉션을 나타냅니다. 해당 메서드 및 속성을 사용하면 컬렉션에 대한 정보를 검색할 수 있습니다.

다음 Visual Basic 예제에서는 여러 폴더 개체 간의 관계와 함께 사용할 수 있는 방법을 보여 줍니다. 사용자가 cmdGetPath라는 명령 단추를 클릭하면 프로그램에 내 컴퓨터에서 폴더를 선택할 수 있는 대화 상자가 표시됩니다. 여기서 ssfDRIVES는 내 컴퓨터ShellSpecialFolderConstants 열거형 값입니다. 사용자가 폴더를 선택하면 폴더의 경로가 txtPath라는 텍스트 상자에 표시됩니다.

Private Sub cmdGetPath_Click()
    Dim oShell As New Shell
    Dim oFolder As Folder
    Dim oFolderItem As FolderItem
 
    Set oFolder = oshell.Shell_BrowseForFolder(Me.hWnd, "Select a Folder", 0, ssfDrives)
   
    Set oFolderItem = oFolderItems.Item

    txtPath.Text = oFolderItem.Path
End Sub

VBScript에서는 ShellSpecialFolderConstants 열거형 값을 스크립트에서 사용할 수 없으므로 이 함수는 약간 다릅니다. 다음 예제에서는 이전 예제와 동등한 VBScript를 보여줍니다.

<SCRIPT LANGUAGE="VBScript">
<!--
    function fnGetMyPathVB() 
        dim oShell
        dim oFolder
        dim oFolderItem
        
        set oShell = CreateObject("shell.application")      
        set oFolder = oshell.Shell_BrowseForFolder(0, "Choose a Folder", 0)             
        set oFolderItem = oFolder.Items.Item         
        
        document.all.item("myPath").innerText = oFolderItem.Path                                
    end function
-->
</SCRIPT>

이전 VBScript 예제의 직접 번역인 다음 JScript 예제에서는 빈 괄호 '()'를 사용하여 ItemsItem 메서드를 호출하는 방법을 확인합니다.

<SCRIPT LANGUAGE="JavaScript">
<!--
    function fnGetMyPathJ() 
    {       
        var oShell = new ActiveXObject("shell.application");
                    
        var oFolder = new Object;                   
        oFolder = oshell.Shell_BrowseForFolder(0, "Choose a folder", 0);
                                
        var oFolderItem = new Object;       
        oFolderItem = oFolder.Items().Item();                               
        
        document.all.item("myPath").innerText = oFolderItem.Path;
    }    
-->
</SCRIPT>