Тема: VBS: Запуск REGEDIT.EXE на заданном разделе реестра
Предлагаю скрипт, которым часто пользуюсь сам: простой (никакого высшего и даже среднего пилотажа), но полезный, являющийся воплощением идеи:
Если вспомнить, что regedit открывается всегда на том же ключе, на котором мы его спозиционировали в предыдущем сеансе работы, и найти ключик, в котором он сохраняет это местоположение, то задачу открытия regedit на любом заданном ключе можно очень сильно упростить.
Вся процедура открытия будет сводится к 2 этапам:
1. Загоняем в ключ HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\Lastkey значение ветки, которую нам необходимо открыть.
2. Запускаем regedit.
Работает это исключительно быстро.
Однако, этот совет не сработает, если REGEDIT.EXE уже запущен (в том числе от имени другого пользователя). Поэтому, запускаем его с ключом /m:
Ключи и параметры запуска стандартных приложений
__________
Редактор реестра regedit.exe.
regedit.exe [параметр] [имя файла]/m - Запускает новый экземпляр Редактора реестра в отдельном процессе (начиная с Windows XP и выше)
и эта казавшаяся вынужденной мера оказывается исключительным удобством, позволяющим, например, в двух окнах REGEDIT.EXE просматривать взаимосвязаные ProgId и ClassId или сравнивать одинаковые разделы реестра у разных пользователей.
Путь к открываемому разделу реестра можно передавать скрипту как аргумент командной строки или вводить в диалоговом окне InputBox(). Если путь начинается непосредственно с имени корневогого раздела реестра (без указания перед ним компьютера), то имя корневого раздела можно сокращать (HKCR, HKCU, HKLM, HKU, HKCC), но при этом обязательно после сокращенного имени ставить «\», даже если после него ничего больше не идёт.
Скрипт позволяет запускать редактор реестра от имени другого пользователя: для этого перед путём к разделу реестра надо поставить знак «+», после чего будет показан стандартный диалог запуска приложения от имени другого пользователя. Если после «+» не указать путь к разделу реестра, то скрипт просто будет перезапущен от имени другого пользователя (чтобы не заблудиться, имя пользователя показывается в заголовке окна).
' RegJump.vbs
LastKeyPath = "HKEY_CURRENT_USER\" & _
"Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\LastKey"
Set WshShell = CreateObject("WScript.Shell")
On Error Resume Next
LastKey = WshShell.RegRead(LastKeyPath)
On Error GoTo 0
If WScript.Arguments.Count <> 0 Then RegPath = Trim(WScript.Arguments.Item(0))
If RegPath = "" Then
RegPath = InputBox( _
"Открыть REGEDIT.EXE (новое окно) на указанном разделе реестра" & _
vbNewLine & vbNewLine & _
"(для запуска этого сценария от имени другого пользователя " & _
"введите или добавте в начале пути к разделу ""+"" ):", _
WScript.ScriptName & _
" [" & CreateObject("WScript.Network").UserName & "]", _
LastKey)
End If
If Not IsEmpty(RegPath) Then
RegPath = Trim(RegPath)
If Left(RegPath, 1) = "+" Then
CreateObject("Shell.Application").ShellExecute _
WScript.FullName, _
"""" & WScript.ScriptFullName & """ " & _
"""" & Right(RegPath, Len(RegPath) - 1) & """",, _
"RunAs"
Else
If UCase(Left(RegPath, 5)) = "HKCR\" Then
RegPath = "HKEY_CLASSES_ROOT\" & Right(RegPath, Len(RegPath) - 5)
ElseIf UCase(Left(RegPath, 5)) = "HKCU\" Then
RegPath = "HKEY_CURRENT_USER\" & Right(RegPath, Len(RegPath) - 5)
ElseIf UCase(Left(RegPath, 5)) = "HKLM\" Then
RegPath = "HKEY_LOCAL_MACHINE\" & Right(RegPath, Len(RegPath) - 5)
ElseIf UCase(Left(RegPath, 4)) = "HKU\" Then
RegPath = "HKEY_USERS\" & Right(RegPath, Len(RegPath) - 4)
ElseIf UCase(Left(RegPath, 5)) = "HKCC\" Then
RegPath = "HKEY_CURRENT_CONFIG\" & Right(RegPath, Len(RegPath) - 5)
End If
If Right(RegPath, 1) = "\" Then RegPath = Left(RegPath, Len(RegPath) - 1)
If RegPath <> LastKey Then
WshShell.RegWrite LastKeyPath, RegPath, "REG_SZ"
End If
WshShell.Run "%windir%\regedit.exe /m" '/m - start new process
End If
End If
Скрипт особенно удобно использовать, если создать на него ярлык и назначить ему сочетание клавиш по своему вкусу (например, Ctrl+Alt+R), сам ярлык можно запрятать в меню «Пуск» в папку второго-третьего уровня, чтобы не мешался перед глазами (можно для подобных ярлыков выделить отдельную папку).
Известная проблема: Из-за невозможности в WSH передачи кавычек в аргументах командной строки не получится в пакетном режиме или от имени другого пользователя открыть раздел, содержащий в пути кавычки, что, к счастью, встречается крайне нечасто.