- Shell Folders и User Shell Folders в Windows XP / 2003 / Vista / 7 / 2008
- Почему пути к служебным папкам Windows не надо брать из реестра?
- Где теперь брать пути к служебным папкам Windows?
- Как открыть скрытые системные папки с Shell командами Windows
- Что такое CLSID ключи?
- Как выполнить Shell команду
- Какие имена папок доступны?
- Shell.BrowseForFolder method
- Syntax
- Parameters
- Return value
- JScript
- Examples
Shell Folders и User Shell Folders в Windows XP / 2003 / Vista / 7 / 2008
Вы вероятно слышали про то, что в Windows существуют так называемые служебные папки: Рабочий Стол, Мои Документы, Мои рисунки, Моя Музыка, Главное Меню и так далее. И пути к этим служебным папкам прописаны в реестре. При этом поменяв настройки в реестре, мы изменяем пути к этим папкам, и можем таким образом перемещать их.
Пути к этим папкам указаны в следующих ключах реестра:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
и
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
Так вот, запомните: эта информация неверна!
Почему пути к служебным папкам Windows не надо брать из реестра?
Почему же пути к служебным папкам Windows не рекомендуется брать из реестра? Ведь такая информация там есть!
Да, конечно, ключи Shell Folders и User Shell Folders в реестре есть. Однако, они помещены туда только в целях совместимости с версией Windows 95. Подробнее об этом читайте статью Реймонда Чена «Длинная и печальная история ключа Shell Folders» (копию этой статьи в формате PDF можно скачать здесь). Специально для тех, кто этому не верит — в Windows 7 в ключе Shell Folders помещена строковая переменная «!Do not use this registry key» со значением «Use the SHGetFolderPath or SHGetKnownFolderPath function instead».
Где теперь брать пути к служебным папкам Windows?
Для программистов — все очень просто: используйте функции SHGetFolderPath или SHGetKnownFolderPath. Для всех остальных — существуют программы, позволяющие просмотреть эти служебные папки. Список таких папок называется теперь CSIDL: Constant Special Item ID List (Microsoft Special Folder Identifiers). Подробнее о таких программах см. статью «Программы просмотра служебных папок Windows».
Как открыть скрытые системные папки с Shell командами Windows
М ногие скрытые системные папки в Windows идентифицируются в реестре Windows вместе с ключом идентификатора класса (CLSID), именами специальных папок и папками на Вашем ПК. Использование этих специальных имен папок вместе с Shell командами означает, что даже скрытые папки, глубоко погруженные в Вашу файловую систему, всегда находятся всего в нескольких нажатиях клавиш.
Что такое CLSID ключи?
Специфическим папкам (а также некоторым программным компонентам) предоставляется CLSID, который позволяет Windows и другим программам легко идентифицировать их, не зная их точного имени. CLSID ключи, общие имена и полные пути к этим папкам сохраняются как записи в реестре Windows. Это похоже на то, как каждый компьютер в Вашей сети имеет регулярное имя, которое Вам легко запомнить — при использовании имени компьютера Windows просматривает IP-адрес компьютера от Вашего имени.
Точно так же программы могут использовать общее имя для папки в структуре Windows и полагаться на фактическое местоположение, которое хранится как CLSID ключ в реестре. Shell объекты, с которыми мы будем работать, перечислены в Реестре в следующем месте:
Каждый подраздел в длинном списке внутри ключа FolderDescriptions представляет собой специальную папку. Имя каждого ключа — это CLSID этой папки. Нажмите на любой из них, и Вы увидите несколько важных значений, прикрепленных к этому ключу, такие как Name (общее имя папки) и RelativePath (фактический путь, где находится папка).
Как выполнить Shell команду
Итак, что Вы можете сделать с этой информацией? Вы можете создать специальную команду с именем Shell, за которой следует общее имя папки, чтобы открыть эту папку. Вы можете отправить Shell команду из диалогового окна «Выполнить» (Windows + R), адресной строки Windows File Explorer или даже адресной строки Internet Explorer. Просто введите команду, используя следующий формат:
Вот пример. Скажем, Вы хотите открыть папку, содержащую изображения, связанные с Вашей учетной записью Windows. Вместо того, чтобы просматривать папку AppData Вашей учетной записи (кстати, скрытую папку), а затем найти папку со снимками Вашей учетной записи, Вы можете просто запустить окно «Выполнить», написать следующую команду и нажать «Enter»:
Какие имена папок доступны?
Это все очень хорошо, но действительно ли стоит просматривать все записи реестра, чтобы найти имена папок? Может быть да, а может быть и нет. К счастью, для этого у Вас есть мы. Ниже приведен список всех имен папок, которые Вы можете использовать после команды Shell, а также относительные местоположения этих папок.
- shell:AccountPictures – %AppData%\Microsoft\Windows\AccountPictures
- shell:AddNewProgramsFolder – Control Panel\All Control Panel Items\Get Programs
- shell:Administrative Tools – %AppData%\Microsoft\Windows\Start Menu\Programs\Administrative Tools
- shell:AppData – %AppData%
- shell:Application Shortcuts – %LocalAppData%\Microsoft\Windows\Application Shortcuts
- shell:AppsFolder – Приложения
- shell:AppUpdatesFolder – Установленные обновления
- shell:Cache – %LocalAppData%\Microsoft\Windows\INetCache
- shell:Camera Roll – %UserProfile%\Pictures\Camera Roll
- shell:CD Burning – %LocalAppData%\Microsoft\Windows\Burn\Burn
- shell:ChangeRemoveProgramsFolder – Control Panel\All Control Panel Items\Programs and Features
- shell:Common Administrative Tools – %ProgramData%\Microsoft\Windows\Start Menu\Programs\Administrative Tools
- shell:Common AppData – %ProgramData%
- shell:Common Desktop – %Public%\Desktop
- shell:Common Documents – %Public%\Documents
- shell:CommonDownloads – %Public%\Downloads
- shell:CommonMusic – %Public%\Music
- shell:CommonPictures – %Public%\Pictures
- shell:Common Programs – %ProgramData%\Microsoft\Windows\Start Menu\Programs
- shell:CommonRingtones – %ProgramData%\Microsoft\Windows\Ringtones
- shell:Common Start Menu – %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup
- shell:Common Startup – %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup
- shell:Common Templates – %ProgramData%\Microsoft\Windows\Templates
- shell:CommonVideo – %Public%\Videos
- shell:ConflictFolder – Control Panel\All Control Panel Items\Sync Center\Conflicts
- shell:ConnectionsFolder – Control Panel\All Control Panel Items\Network Connections
- shell:Contacts – %UserProfile%\Contacts
- shell:ControlPanelFolder – Control Panel\All Control Panel Items
- shell:Cookies – %LocalAppData%\Microsoft\Windows\INetCookies
- shell:Cookies\Low – %LocalAppData%\Microsoft\Windows\INetCookies\Low
- shell:CredentialManager – %AppData%\Microsoft\Credentials
- shell:CryptoKeys – %AppData%\Microsoft\Crypto
- shell:desktop – Desktop
- shell:device Metadata Store – %ProgramData%\Microsoft\Windows\DeviceMetadataStore
- shell:documentsLibrary – Libraries\Documents
- shell:downloads – %UserProfile%\Downloads
- shell:dpapiKeys – %AppData%\Microsoft\Protect
- shell:Favorites – %UserProfile%\Favorites
- shell:Fonts – %WinDir%\Fonts
- shell:Games – Games
- shell:GameTasks – %LocalAppData%\Microsoft\Windows\GameExplorer
- shell:History – %LocalAppData%\Microsoft\Windows\History
- shell:HomeGroupCurrentUserFolder – Homegroup\(user-name)
- shell:HomeGroupFolder – Homegroup
- shell:ImplicitAppShortcuts – %AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\ImplicitAppShortcuts
- shell:InternetFolder – Internet Explorer
- shell:Libraries – Libraries
- shell:Links – %UserProfile%\Links
- shell:Local AppData – %LocalAppData%
- shell:LocalAppDataLow – %UserProfile%\AppData\LocalLow
- shell:MusicLibrary – Libraries\Music
- shell:MyComputerFolder – This PC
- shell:My Music – %UserProfile%\Music
- shell:My Pictures – %UserProfile%\Pictures
- shell:My Video – %UserProfile%\Videos
- shell:NetHood – %AppData%\Microsoft\Windows\Network Shortcuts
- shell:NetworkPlacesFolder – Network
- shell:OneDrive – OneDrive
- shell:OneDriveCameraRoll – %UserProfile%\OneDrive\Pictures\Camera Roll
- shell:OneDriveDocuments – %UserProfile%\OneDrive\Documents
- shell:OneDriveMusic – %UserProfile%\OneDrive\Music
- shell:OneDrivePictures – %UserProfile%\OneDrive\Pictures
- shell:Personal – %UserProfile%\Documents
- shell:PicturesLibrary – Libraries\Pictures
- shell:PrintersFolder – All Control Panel Items\Printers
- shell:PrintHood – %AppData%\Microsoft\Windows\Printer Shortcuts
- shell:Profile – %UserProfile%
- shell:ProgramFiles – %ProgramFiles%
- shell:ProgramFilesCommon – %ProgramFiles%\Common Files
- shell:ProgramFilesCommonX64 – %ProgramFiles%\Common Files (64-bit Windows только)
- shell:ProgramFilesCommonX86 – %ProgramFiles(x86)%\Common Files (64-bit Windows только)
- shell:ProgramFilesX64 – %ProgramFiles% (64-bit Windows только)
- shell:ProgramFilesX86 – %ProgramFiles(x86)% (64-bit Windows только)
- shell:Programs – %AppData%\Microsoft\Windows\Start Menu\Programs
- shell:Public – %Public%
- shell:PublicAccountPictures – %Public%\AccountPictures
- shell:PublicGameTasks – %ProgramData%\Microsoft\Windows\GameExplorer
- shell:PublicLibraries – %Public%\Libraries
- shell:Quick Launch – %AppData%\Microsoft\Internet Explorer\Quick Launch
- shell:Recent – %AppData%\Microsoft\Windows\Recent
- shell:RecordedTVLibrary – Libraries\Recorded TV
- shell:RecycleBinFolder – Recycle Bin
- shell:ResourceDir – %WinDir%\Resources
- shell:Ringtones – %ProgramData%\Microsoft\Windows\Ringtones
- shell:Roamed Tile Images – %LocalAppData%\Microsoft\Windows\RoamedTileImages
- shell:Roaming Tiles – %AppData%\Microsoft\Windows\RoamingTiles
- shell:SavedGames – %UserProfile%\Saved Games
- shell:Screenshots – %UserProfile%\Pictures\Screenshots
- shell:Searches – %UserProfile%\Searches
- shell:SearchHistoryFolder – %LocalAppData%\Microsoft\Windows\ConnectedSearch\History
- shell:SearchHomeFolder – search-ms:
- shell:SearchTemplatesFolder – %LocalAppData%\Microsoft\Windows\ConnectedSearch\Templates
- shell:SendTo – %AppData%\Microsoft\Windows\SendTo
- shell:Start Menu – %AppData%\Microsoft\Windows\Start Menu
- shell:StartMenuAllPrograms – StartMenuAllPrograms
- shell:Startup – %AppData%\Microsoft\Windows\Start Menu\Programs\Startup
- shell:SyncCenterFolder – Control Panel\All Control Panel Items\Sync Center
- shell:SyncResultsFolder – Control Panel\All Control Panel Items\Sync Center\Sync Results
- shell:SyncSetupFolder – Control Panel\All Control Panel Items\Sync Center\Sync Setup
- shell:System – %WinDir%\System32
- shell:SystemCertificates – %AppData%\Microsoft\SystemCertificates
- shell:SystemX86 – %WinDir%\SysWOW64
- shell:Templates – %AppData%\Microsoft\Windows\Templates
- shell:ThisPCDesktopFolder – Desktop
- shell:UsersFilesFolder – %UserProfile%
- shell:User Pinned – %AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned
- shell:UserProfiles – %HomeDrive%\Users
- shell:UserProgramFiles – %LocalAppData%\Programs
- shell:UserProgramFilesCommon – %LocalAppData%\Programs\Common
- shell:UsersLibrariesFolder – Libraries
- shell:VideosLibrary – Libraries\Videos
- shell:Windows – %WinDir%
Конечно, как только Вы найдете эти папки, Вы можете легко добавить их в закладки, чтобы в будущем Вы могли перейти к ним еще быстрее.
Shell.BrowseForFolder method
Creates a dialog box that enables the user to select a folder and then returns the selected folder’s Folder object.
Syntax
Parameters
Type: Integer
The handle to the parent window of the dialog box. This value can be zero.
A String value that represents the title displayed inside the Browse dialog box.
Type: Integer
An Integer value that contains the options for the method. This can be zero or a combination of the values listed under the ulFlags member of the BROWSEINFO structure.
vRootFolder [in, optional]
Type: Variant
The root folder to use in the dialog box. The user cannot browse higher in the tree than this folder. If this value is not specified, the root folder used in the dialog box is the desktop. This value can be a string that specifies the path of the folder or one of the ShellSpecialFolderConstants values. Note that the constant names found in ShellSpecialFolderConstants are available in Visual Basic, but not in VBScript or JScript. In those cases, the numeric values must be used in their place.
Return value
JScript
Type: FOLDER**
An object reference to the selected folder’s Folder object.
Type: FOLDER**
An object reference to the selected folder’s Folder object.
Examples
The following example uses BrowseForFolder to display a browse window titled «Example» rooted at the Windows folder. Proper usage is shown for JScript, VBScript, and Visual Basic.