스크립팅 가능한 셸 개체
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 개체를 나열합니다.
셸 개체 인스턴스화
초기 바인딩을 사용하여 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>
앞의 예제에서 sDir 은 Folder 개체의 경로입니다. 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 예제에서는 빈 괄호 '()'를 사용하여 Items 및 Item 메서드를 호출하는 방법을 확인합니다.
<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>