1. Создание объекта
'создаётся объект типа "IShellDispatch":
Set objShellApp = CreateObject("Shell.Application")
Не все объекты, их свойства и методы будут работать на всех версиях Windows. Подробности - см. MSDN (часто проще проверить работоспособность кода экспериментально). Устанавливайте обновления для Internet Explorer. Некоторые методы доступны или имеют смысл только в контексте HTML-документа.
При использовании свойств и методов объекта Shell, возвращающих агрегатные объекты, в VBScript желательно всегда обрабатывать исключения и проверять полученный объект на существование (сравнивать с Nothing). Объект типа "IShellDispatch" возвращается также в таких случаях:
Пример №1:
Set objShellApp = CreateObject("Shell.Application")
Set objISD = objShellApp.Application
Пример №2:
Set objShellApp = CreateObject("Shell.Application")
Set objISD = objShellApp.Parent
Пример №3:
Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.NameSpace("C:\")
Set objISD = objFolder.Application
Пример №4:
Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.NameSpace("C:\")
Set objFolderItems = objFolder.Items()
Set objISD = objFolderItems.Application
Пример №5:
Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.NameSpace("C:\")
Set objFolderItem = objFolder.Self
Set objISD = objFolderItem.Application
2. Свойства
2.1. Application
Синтаксис:
Возвращаемое значение: объект "IShellDispatch".
Замечание: только чтение.
Пример(Windows XP):
Set objShellApp = CreateObject("Shell.Application")
If objShellApp.Application.GetSetting(1) = 0 Then
MsgBox "В ""Свойствах папки"" в проводнике установлен режим ""Не показывать скрытые файлы и папки""!", vbInformation
Else
MsgBox "В ""Свойствах папки"" в проводнике установлен режим ""Показывать скрытые файлы и папки""!", vbInformation
End If
2.2. Parent
Синтаксис:
Возвращаемое значение: объект "IShellDispatch".
Замечание: только чтение.
Пример(Windows XP):
Set objShellApp = CreateObject("Shell.Application")
If objShellApp.Parent.GetSetting(1) = 0 Then
MsgBox "В ""Свойствах папки"" в проводнике установлен режим ""Не показывать скрытые файлы и папки""!", vbInformation
Else
MsgBox "В ""Свойствах папки"" в проводнике установлен режим ""Показывать скрытые файлы и папки""!", vbInformation
End If
3. Методы
3.1. MinimizeAll
Синтаксис:
Назначение: сворачивание всех окон рабочего стола Windows. Возвращаемого значения нет.
Параметры: нет.
Описание: вызов метода приводит к тому же эффекту, что и команда "Показать рабочий стол" ("Minimize All Windows") контекстного меню панели задач Windows или щелчок по значку "Свернуть все окна" ("Show Desktop") на панели "Быстрый запуск" ("Quick Launch") панели задач Windows.
Пример:
Set objShellApp = CreateObject("Shell.Application")
objShellApp.MinimizeAll
3.2. UndoMinimizeAll
Синтаксис:
Назначение: восстановление всех свёрнутых окон рабочего стола Windows. Возвращаемого значения нет.
Параметры: нет.
Описание: вызов метода приводит к тому же эффекту, что и команда "Отменить Свернуть все" ("Undo Minimize All Windows") контекстного меню панели задач Windows или повторный щелчок по значку "Свернуть все окна" ("Show Desktop") на панели "Быстрый запуск" ("Quick Launch") панели задач Windows.
Пример:
Set objShellApp = CreateObject("Shell.Application")
objShellApp.MinimizeAll
WScript.Sleep 300
objShellApp.UndoMinimizeAll
3.3. TileHorizontally
Синтаксис:
Назначение: упорядочение окон рабочего стола Windows по горизонтали. Возвращаемого значения нет.
Параметры: нет.
Описание: вызов метода приводит к тому же эффекту, что и команда "Окна сверху вниз" ("Tile Windows Horizontally") контекстного меню панели задач Windows.
Пример:
Set objShellApp = CreateObject("Shell.Application")
objShellApp.TileHorizontally
3.4. TileVertically
Синтаксис:
Назначение: упорядочение окон рабочего стола Windows по вертикали. Возвращаемого значения нет.
Параметры: нет.
Описание: вызов метода приводит к тому же эффекту, что и команда "Окна слева направо" ("Tile Windows Vertically") контекстного меню панели задач Windows.
Пример:
Set objShellApp = CreateObject("Shell.Application")
objShellApp.TileVertically
3.5. CascadeWindows
Синтаксис:
Назначение: расположение всех несвёрнутых окон рабочего стола Windows каскадом. Возвращаемого значения нет.
Параметры: нет.
Описание: вызов метода приводит к тому же эффекту, что и команда "Окна каскадом" ("Cascade Windows") контекстного меню панели задач Windows.
Пример:
Set objShellApp = CreateObject("Shell.Application")
objShellApp.CascadeWindows
3.6. Explore
Синтаксис:
Назначение: запуск проводника Windows с определённой открытой папкой. Возвращаемого значения нет.
Параметры:
<Path> - путь к открываемой папке. Тип - строка.
Описание: <Path> может быть числом, определяющим одну из специальных папок Windows. Коды папок - см. описание метода "NameSpace".
Пример:
Set objShellApp = CreateObject("Shell.Application")
objShellApp.Explore("C:\")
objShellApp.Open("C:\") 'для сравнения
3.7. Open
Синтаксис:
Назначение: запуск проводника Windows с определённой открытой папкой. Возвращаемого значения нет.
Параметры:
<Path> - путь к открываемой папке. Тип - строка.
Описание: <Path> может быть числом, определяющим одну из специальных папок Windows. Коды папок - см. описание метода "NameSpace".
Пример:
Set objShellApp = CreateObject("Shell.Application")
objShellApp.Open("C:\")
objShellApp.Explore("C:\") 'для сравнения
3.8. NameSpace
Синтаксис:
Назначение: получение объекта виртуальной папки проводника. Возвращает объект "Folder".
Параметры:
<Path> - путь к папке или диску. Тип - строка.
Описание: <Path> может быть числом, определяющим одну из специальных папок Windows.
Пример №1:
Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.NameSpace("C:\")
MsgBox objFolder.Title, vbInformation
Пример №2:
'Вывод путей и заголовков всех возможных специальных папок.
On Error Resume Next
Set List = CreateObject("Scripting.Dictionary")
List.Add &H1d, "ssfALTSTARTUP"
List.Add &H1a, "ssfAPPDATA"
List.Add &Ha, "ssfBITBUCKET"
List.Add &H1e, "ssfCOMMONALTSTARTUP"
List.Add &H23, "ssfCOMMONAPPDATA"
List.Add &H19, "ssfCOMMONDESKTOPDIR"
List.Add &H1f, "ssfCOMMONFAVORITES"
List.Add &H17, "ssfCOMMONPROGRAMS"
List.Add &H16, "ssfCOMMONSTARTMENU"
List.Add &H18, "ssfCOMMONSTARTUP"
List.Add &H3, "ssfCONTROLS"
List.Add &H21, "ssfCOOKIES"
List.Add &H0, "ssfDESKTOP"
List.Add &H10, "ssfDESKTOPDIRECTORY"
List.Add &H11, "ssfDRIVES"
List.Add &H6, "ssfFAVORITES"
List.Add &H14, "ssfFONTS"
List.Add &H22, "ssfHISTORY"
List.Add &H20, "ssfINTERNETCACHE"
List.Add &H1c, "ssfLOCALAPPDATA"
List.Add &H27, "ssfMYPICTURES"
List.Add &H13, "ssfNETHOOD"
List.Add &H12, "ssfNETWORK"
List.Add &H5, "ssfPERSONAL"
List.Add &H4, "ssfPRINTERS"
List.Add &H1b, "ssfPRINTHOOD"
List.Add &H28, "ssfPROFILE"
List.Add &H26, "ssfPROGRAMFILES"
List.Add &H2, "ssfPROGRAMS"
List.Add &H8, "ssfRECENT"
List.Add &H9, "ssfSENDTO"
List.Add &Hb, "ssfSTARTMENU"
List.Add &H7, "ssfSTARTUP"
List.Add &H25, "ssfSYSTEM"
List.Add &H15, "ssfTEMPLATES"
List.Add &H24, "ssfWINDOWS"
Set objShellApp = CreateObject("Shell.Application")
ResStr = vbNullString
For Each It In List
Set objFolder = objShellApp.NameSpace(It)
AddStr = List.Item(It) & " (" & objFolder.Self.Path & ") " & objFolder.Title
If Err.Number <> 0 Then
AddStr = List.Item(It) & " Папка не найдена"
Err.Clear
End If
ResStr = ResStr & AddStr & vbCrLf
Next
ShowInNotepad(ResStr)
'Процедура отображает переданную строку в блокноте
Sub ShowInNotepad(StrToFile)
Set FSO = CreateObject("Scripting.FileSystemObject")
TempPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%") & "\" & FSO.GetTempName
Set TxtFile = FSO.CreateTextFile(TempPath)
TxtFile.WriteLine(StrToFile)
TxtFile.Close
CreateObject("WScript.Shell").Run "notepad.exe " & TempPath
'WScript.Sleep 1000 'Ожидание, чтобы блокнот запустился
'FSO.DeleteFile(TempPath)
End Sub
3.9. FileRun
Синтаксис:
Назначение: вызов окна "Запуск программы" ("Run"). Возвращаемого значения нет.
Параметры: нет.
Описание: вызов метода приводит к тому же эффекту, что и команда меню "Пуск"-"Выполнить" ("Start"-"Run").
Пример:
Set objShellApp = CreateObject("Shell.Application")
objShellApp.FileRun
3.10. FindComputer
Синтаксис:
Назначение: вызов окна проводника Windows "Результаты поиска - компьютеры" ("Search Results - Computers"). Возвращаемого значения нет.
Параметры: нет.
Пример:
Set objShellApp = CreateObject("Shell.Application")
objShellApp.FindComputer
3.11. FindFiles
Синтаксис:
Назначение: вызов окна проводника Windows "Результаты поиска" ("Find: All Files"). Возвращаемого значения нет.
Параметры: нет.
Описание: вызов метода приводит к тому же эффекту, что и команда меню "Пуск"-"Поиск" ("Start"-"Find").
Пример:
Set objShellApp = CreateObject("Shell.Application")
objShellApp.FindFiles
3.12. FindPrinter
Синтаксис:
FindPrinter(<Name>,<Location>,<Model>)
Назначение: вызов окна "Поиск принтеров" ("Find Printers") в Active Directory с предварительным заполнением параметров поиска. Возвращаемого значения нет.
Параметры:
<Name> - необязательный. Строка - имя принтера.
<Location> - необязательный. Строка - местоположение принтера.
<Model> - необязательный. Строка - модель принтера.
Описание: вызов метода приводит примерно к тому же эффекту, что и команда меню "Пуск"-"Поиск"-"Принтеры..." ("Start"-"Search"-"For Printers...") в Windows 2000. [/code]
Пример (Windows 2000 Server):
[code=vbnet]Set objShellApp = CreateObject("Shell.Application")
objShellApp.FindPrinter "Name", "Location", "Model"
3.13. Help
Синтаксис:
Назначение: вызов справки Windows. Возвращаемого значения нет.
Параметры: нет.
Описание: вызов метода приводит к тому же эффекту, что и команда меню "Пуск"-"Справка и поддержка" ("Start"-"Help and Support").
Пример:
Set objShellApp = CreateObject("Shell.Application")
objShellApp.Help
3.14. ShutdownWindows
Синтаксис:
Назначение: вызов окна выключения и перезагрузки компьютера. Возвращаемого значения нет.
Параметры: нет.
Описание: вызов метода приводит к тому же эффекту, что и команда меню "Пуск"-"Завершение работы" ("Start"-"Shut Down").
Пример:
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShutdownWindows
3.15. SetTime
Синтаксис:
Назначение: вызов окна настройки времени и даты. Возвращаемого значения нет.
Параметры: нет.
Описание: вызов метода приводит к тому же эффекту, что и двойной щелчок по часам в правой части панели задач Windows.
Пример:
Set objShellApp = CreateObject("Shell.Application")
objShellApp.SetTime
3.16. TrayProperties
Синтаксис:
Назначение: вызов окна свойств панели задач Windows. Возвращаемого значения нет.
Параметры: нет.
Описание: вызов метода приводит к тому же эффекту, что и команда "Свойства" ("Properties") контекстного меню панели задач Windows.
Пример:
Set objShellApp = CreateObject("Shell.Application")
objShellApp.TrayProperties
3.17. ControlPanelItem
Синтаксис:
ControlPanelItem(<ИмяФайла>)
Назначение: вызов конкретного приложения панели управления. Возвращаемого значения нет.
Параметры:
<ИмяФайла> - имя файла конкретного приложения панели управления. Тип - строка. Пустая строка вызывает саму панель управления.
Описание: все файлы приложений панели управления имеют расширение .cpl. Некоторые приложения панели управления:
access.cpl - специальные возможности.
appwiz.cpl - установка и удаление программ.
desk.cpl - настройка экрана.
hdwwiz.cpl - мастер установки оборудования.
inetcpl.cpl - свойства обозревателя.
intl.cpl - язык и региональные стандарты.
joy.cpl - игровые устройства.
main.cpl - мышь.
mmsys.cpl - звуки и аудиоустройства.
ncpa.cpl - сетевые подключения.
nusrmgr.cpl - учётные записи пользователей.
odbccp32.cpl - настройка источников данных ODBC.
powercfg.cpl - управление электропитанием.
sysdm.cpl - свойства системы.
telephon.cpl - телефон и модем.
timedate.cpl - настройки времени и даты.
Пример:
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ControlPanelItem "desk.cpl"
objShellApp.ControlPanelItem ""
3.18. BrowseForFolder
Синтаксис:
BrowseForFolder(<Hwnd>,<Заголовок>,<Опции>,<КорневаяПапка>)
Назначение: вызов модального окна "Выбор папки". Возвращает объект "Folder".
Параметры:
<Hwnd> - дескриптор родительского окна. Тип - целое число. 0 - текущее окно.
<Заголовок> - пояснение для пользователя в окне "Выбор папки". Тип - строка.
<Опции> - целое число (комбинация битовых флагов). Например, флаг 512 - запретить кнопку "Создать папку", 1 - не отображать Корзину, 16 - отображать EditBox для ввода полного пути с клавиатуры и т.п. Подробнее - см. MSDN.
<КорневаяПапка> - необязательный параметр. Корневая папка в окне "Выбор папки". Тип - строка. Пользователь не сможет пройти в окне "Выбор папки" выше этой папки. Если параметр не указан, корневой папкой будет рабочий стол Windows.
Пример:
On Error Resume Next
Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.BrowseForFolder(0, "Выбор папки", 0, "C:\")
MsgBox objFolder.Self.Path, vbInformation
If Err.Number <> 0 Then
MsgBox "Папка не выбрана!", vbInformation
End If
3.19. Windows
Синтаксис:
Назначение: получение объекта "ShellWindows". Возвращает объект "ShellWindows".
Параметры: нет.
Пример:
Set objShellApp = CreateObject("Shell.Application")
WinCol = objShellApp.Windows().Count
MsgBox "В настоящий момент открыто окон Проводника - " & WinCol, vbInformation
3.20. CanStartStopService
Синтаксис:
CanStartStopService(<ServiceName>)
Назначение: определяет, может ли текущий пользователь запустить/остановить указанный сервис. Возвращаемое значение - булево (число).
Параметры:
<ServiceName> - строка, имя сервиса.
Пример:
Set objShellApp = CreateObject("Shell.Application")
ServiceName = "haspnt"
If Not objShellApp.CanStartStopService(ServiceName) Then
MsgBox "Вы НЕ можете остановить/запустить сервис " & ServiceName & "!", vbInformation
Else
MsgBox "Вы можете остановить/запустить сервис " & ServiceName & "!", vbInformation
End If
3.21. IsServiceRunning
Синтаксис:
IsServiceRunning(<ServiceName>)
Назначение: определяет, запущен ли указанный сервис. Возвращаемое значение - булево (число).
Параметры:
<ServiceName> - строка, имя сервиса.
Пример:
Set objShellApp = CreateObject("Shell.Application")
ServiceName = "haspnt"
If objShellApp.IsServiceRunning(ServiceName) Then
MsgBox "Сервис " & ServiceName & " запущен!", vbInformation
Else
MsgBox "Сервис " & ServiceName & " НЕ запущен!", vbInformation
End If
3.22. ServiceStart
Синтаксис:
ServiceStart(<ServiceName>,<Persistent>)
Назначение: запускает указанный сервис. Возвращаемое значение - булево (число) - определяет, успешно ли завершена операция.
Параметры:
<ServiceName> - строка, имя сервиса.
<Persistent> - булево (число). Определяет, что сервис должен автоматически стартовать при старте системы. Если указана ложь, конфигурация сервиса не меняется.
Пример:
Set objShellApp = CreateObject("Shell.Application")
Serv = "haspnt"
If objShellApp.ServiceStart(Serv, false) = 0 Then
MsgBox "НЕ удалось запустить сервис " & Serv & "!", vbInformation
Else
MsgBox "Сервис " & Serv & " успешно запущен!", vbInformation
End If
3.23. ServiceStop
Синтаксис:
ServiceStop(<ServiceName>,<Persistent>)
Назначение: останавливает указанный сервис. Возвращаемое значение - булево (число) - определяет, успешно ли завершена операция.
Параметры:
<ServiceName> - строка, имя сервиса.
<Persistent> - булево (число). Определяет, что сервис должен автоматически стартовать при старте системы. Если указана ложь, конфигурация сервиса не меняется.
Пример:
Set objShellApp = CreateObject("Shell.Application")
Serv = "haspnt"
If objShellApp.ServiceStop(Serv, false) = 0 Then
MsgBox "НЕ удалось остановить сервис " & Serv & "!", vbInformation
Else
MsgBox "Сервис " & Serv & " успешно остановлен!", vbInformation
End If
3.24. GetSystemInformation
Синтаксис:
GetSystemInformation(<Name>)
Назначение: возвращает некоторую системную информацию (возвращаемое значение - число).
Параметры:
<Name> - строка, определяет тип информации.
Описание: подробнее - см. MSDN.
Пример:
Set objShellApp = CreateObject("Shell.Application")
MsgBox "DirectoryServiceAvailable = " & objShellApp.GetSystemInformation("DirectoryServiceAvailable")
MsgBox "ProcessorLevel = " & objShellApp.GetSystemInformation("ProcessorLevel")
MsgBox "ProcessorArchitecture = " & objShellApp.GetSystemInformation("ProcessorArchitecture")
MsgBox "PhysicalMemoryInstalled = " & objShellApp.GetSystemInformation("PhysicalMemoryInstalled")'в байтах
3.25. IsRestricted
Синтаксис:
IsRestricted(<Group>,<Restriction>)
Назначение: возвращает значение заданного ограничения по данным реестра (возвращаемое значение - число).
Параметры:
<Group> - строка, наименование группы (ключа) в HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ policies.
<Restriction> - строка, наименование параметра в указанной группе реестра, значение которого надо вернуть.
Описание: если параметр не найден в реестре, возвращается 0. Подробнее - см. MSDN.
Пример:
Set objShellApp = CreateObject("Shell.Application")
MsgBox objShellApp.IsRestricted("system", "dontdisplaylastusername")
3.26. ShellExecute
Синтаксис:
ShellExecute(<File>,<Arguments>,<Directory>,<Operation>,<Show>)
Назначение: выполняет указанное действие над указанным файлом. Возвращаемого значения нет.
Параметры:
<File> - строка. Имя файла.
<Arguments> - строка (необязательный). Параметры для <Operation>.
<Directory> - строка (необязательный). Путь к каталогу с указанным файлом. Если не указан, используется текущий каталог.
<Operation> - строка (необязательный). Действие ("глагол"), которое необходимо выполнить. Если не указан, используется действие по умолчанию.
<Show> - число (необязательный). Рекомендуемое состояние окна при выполнении. Запускаемое приложение может проигнорировать этот параметр. Возможные значения:
0 - скрытое окно.
1 - нормальное окно.
2 - минимизированное окно.
3 - максимизированное окно.
4 - запустить приложение с окном в том состоянии, в котором оно было последний раз. Текущее активное окно останется активным.
5 - запустить приложение с окном в текущем состоянии.
7 - минимизированное окно. Текущее активное окно останется активным.
10 - состояние окна по умолчанию для приложения.
Пример:
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShellExecute "autoexec.bat", "", "C:\", "edit", 1
3.27. ShowBrowserBar
Синтаксис:
ShowBrowserBar(<CLSID>,<Show>)
Назначение: открывает или закрывает указанную панель обозревателя. Возвращает true в случае успеха, и false в случае неудачи.
Параметры:
<CLSID> - строка. Идентификатор класса (CLSID) панели обозревателя. Некоторые возможные значения:
Favorites - {EFA24E61-B078-11d0-89E4-00C04FC9E26E}
Folders - {EFA24E64-B078-11d0-89E4-00C04FC9E26E}
History - {EFA24E62-B078-11d0-89E4-00C04FC9E26E}
Search - {30D02401-6A81-11d0-8274-00C04FD5AE38}
<Show> - булево. True - показать, false - спрятать панель.
Описание: метод доступен только в контексте HTML-документа.
Пример:
<script language="VBScript">
function fnShowBrowserBarVB()
set objShell = CreateObject("Shell.Application")
bReturn = objShell.ShowBrowserBar("{EFA24E61-B078-11d0-89E4-00C04FC9E26E}", true)
set objShell = nothing
end function
</script>
3.28. AddToRecent
Синтаксис:
AddToRecent(<File>,<Category>)
Назначение: помещает ярлык на указанный файл в папку "Недавних документов" ("Recent") текущего пользователя. Возвращаемого значения нет.
Параметры:
<File> - строка. Путь к файлу.
<Category> - строка (необязательный). Имя категории, в которую помещается файл.
Пример (WindowsXP):
Set objShellApp = CreateObject("Shell.Application")
objShellApp.AddToRecent "C:\MyFile.txt"
3.29. ExplorerPolicy
Синтаксис:
ExplorerPolicy(<PolicyName>)
Назначение: возвращает значение указанной Internet Explorer policy.
Параметры:
<PolicyName> - строка. Имя Internet Explorer policy.
Описание: WindowsXP и выше.
3.30. GetSetting
Синтаксис:
Назначение: возвращает значение указанной глобальной установки (параметра) проводника.
Параметры:
<Setting> - целое число (набор флагов), определяющее глобальную установку (параметр) проводника. Некоторые возможные значения (подробнее - см. MSDN):
1 - Показывать скрытые файлы и папки.
2 - Скрывать расширения для зарегистрированных типов файлов.
Пример (WindowsXP):
Set objShellApp = CreateObject("Shell.Application")
If Not objShellApp.GetSetting(2) Then
MsgBox "В ""Свойствах папки"" в проводнике установлен режим " & _
"""Скрывать расширения для зарегистрированных типов файлов""!", vbInformation
Else
MsgBox "В ""Свойствах папки"" в проводнике снят режим " & _
"""Скрывать расширения для зарегистрированных типов файлов""!", vbInformation
End If
3.31. ToggleDesktop
Синтаксис:
Назначение: сворачивает или разворачивает все окна на рабочем столе. Возвращаемого значения нет.
Параметры: нет.
Описание: имитирует нажатие на значок "Свернуть все окна" в панели "Быстрый запуск" ("Quick launch").
Пример (WindowsXP):
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ToggleDesktop
3.32. WindowsSecurity
Синтаксис:
Назначение: имитирует нажатие CTRL+ALT+DELETE при использовании соединения Microsoft Terminal Server. Возвращаемого значения нет.
Параметры: нет.