Главная > Без вредных советов, Уголок гика > Переход в нужный раздел реестра одним щелчком мыши

Переход в нужный раздел реестра одним щелчком мыши

В своих статьях я довольно часто пишу «перейдите в раздел реестра HKEY_что-то_там», и это подчас утомительное путешествие (особенно когда требуется попасть в раздел идентификатора класса какого-нибудь ActiveX). Поэтому я хочу поделиться с вами решением, максимально упрощающим переход в раздел реестра до двух действий: копируете в буфер обмена путь к реестре - щелчок мыши - и вы на месте.

Немного теории

Редактор реестра (regedit.exe), начиная с Windows 2000, обладает одной полезной особенностью: он «запоминает» последний раздел, который был открыт в нем до того, как пользователь закрыл программу. Полный путь к этому разделу  пишется в параметр Lastkey строкового типа в ключе

HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit
Для нашей задачи можно (и удобно) воспользоваться этой возможностью. Если заранее записать туда путь, который нам нужен в данный момент, то открыв редактор реестра, никуда переходить не потребуется.

Реализация

Некоторое время назад я создал утилиту RegOwnershipEx, которая позволяет получить полный доступ к разделу реестра одним кликом. Кроме этого, она позволяет перейти в желаемый раздел реестра. RegOwnershipEx 1.0.0.1 Я рекомендую вам с ней ознакомиться.

Я набросал простенький скрипт, который будет получать содержимое буфера обмена, записывает его в реестр и открывает редактор реестра. Предполагается следующий сценарий:

Вы читаете статью, в ней написано – «перейдите в раздел реестра HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion». Вы выделяете путь к разделу, нажимаете CTRL+С и запускаете скрипт. Редактор реестра открывается в нужном месте.

В качестве средства автоматизации я использую возможности Windows Scripting Host (WHS), а в качестве  языка программирования - VBScript.

Буфер обмена

Получение содержимого буфера обмена испокон веков делается через Internet Explorer. Вот так, например, делают авторы блогов Microsoft TechNet:

Dim objIE
Dim сClipBoard
Set objIE = CreateObject("InternetExplorer.Application")
сClipBoard = objIE.document.parentwindow.clipboardData.GetData("text")
objIE.Quit

Код создает экземпляр объекта IE и через его методы выдёргивает содержимое буфера обмена в переменную сClipBoard. Код не лишен недостатков. Во-первых, он требует наличие IE, во-вторых – появляется дурацкое подтверждение прав доступа страницы к буферу обмена (в IE9+Windows 7, во всяком случае). Да и на создание экземпляра IE уходит приличное время, и скрипт явно "тормозит" Мы пойдем другим путем. Мы создадим экземпляр не IE, а HTA-файла. Он не задает вопросов и работает на порядок быстрее. А код будет почти таким же:

set objHTA=createobject("htmlfile")
cClipBoard=objHTA.parentwindow.clipboarddata.getdata("text")

Отличное решение

Работа с реестром

Необходимыми методами для работы с реестром снабжен объект WScript.Shell. В частности, нас интересует метод RegWrite. Синтаксис смотрим, опять-таки, на MSDN. В нашем случае мы должны перезаписать значение параметра LastKey в разделе

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit
Для этого допишем в скрипт следующее:

Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\LastKey", сClipBoard, "REG_SZ"

Полагаю, здесь ничего сложного нет.
В итоге скрипт получится таким:

Dim objHTA
Dim cClipBoard
Dim WshShell
set objHTA=createobject("htmlfile")
cClipBoard=objHTA.parentwindow.clipboarddata.getdata("text")
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\LastKey", cClipBoard, "REG_SZ"
WshShell.Run "regedit.exe -m"
Set objHTA = nothing
Set WshShell = nothing

Сам редактор реестра запускается командой regedit.exe -m, позволяющей открыть редактор реестра в нескольких экземплярах (подробнее о ключах командной строки редактора реестра можно почитать здесь). Сохраняем код скрипта, предположим, в файл d:\regnav.vbs. Осталось создать ярлык на запуск скрипта с командой вида

wscript d:\regnav.vbs

Проверка работоспособности

Выделяем вот эту строку:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
Нажимаем CTRL+C и запускаем. Не правда ли, удобно? Примечание. Раздел, к которому вы переходите посредством копирования в буфер обмена пути в реестре, должен существовать, в противном случае редактор реестра откроется в корне. Впрочем, вам ничего не мешает доработать скрипт, чтобы он создавал нужный раздел/ключ. Считайте это домашним заданием.


Была ли эта информация для вас полезной? Возможно, у вас есть более простое и эффективное решение? Расскажите об этом в комментариях!

Winreview.ru можно найти в Вконтакте, Facebook и Twitter. Присоединяйтесь!

Комментарии

  1. NVS

    Сергей, спасибо, удобный скрипт.

  2. Сергей Ткаченко

    Пожалуйста. Мне он приличное количество времени сэкономил

  3. Жаконя

    И мне... и мне... и больше 2-х в одни руки не давать! Оч полезная штука, благодарствую!

  4. ЁжЫГ

    Вот чем меня бесит "этот вордпресс" писал, старался, комментарий, но забыл заполнить имя и мыло (бывает), отправил - получил ошибку - вернулся... и всё пропало, второй раз писать желание не возникло (

    а ведь комментарий был о том, что копирование в буфер выделенного пути к реестру и указанный скрипт можно добавить в контекстное меню, что я у себя и сделал

  5. Иван

    ЁжЫГ

    ...а ведь комментарий был о том, что копирование в буфер выделенного пути к реестру и указанный скрипт можно добавить в контекстное меню, что я у себя и сделал

    Уважаемый, а может Вы поборете некую толику природной лени и выложите на суд сообщества свой вариант? Уверен, многим было бы интересно оценить и, возможно, применить именно его.

  6. Алик

    Способ очень понравился. Спасибо!

    Возник вопрос можно ли в скрипте изменить запуск приложения Regedit на другой редактор реестра, например Registry Workshop или аналогичный? если можно, то растолкуйте, как это сделать.

  7. Сергей Ткаченко

    @Алик
    Я пользуюсь только стандартным редактором реестра. Вряд ли я вам буду полезен, ибо указанных вами приложений я в глаза не видел.

  8. Anatoly

    Я снова стащил скрипт, как и год назад. Вопреки ожиданиям скрипт на Windows8 работает. Чтобы посодействовать поглощению пиара, добавлю, что достаточно

    лишь сохранить скопированный скрипт, и никаких ярлыков не создавать. Далее, выделив путь, копируем его, но вместо вставки щёлкаем по сохранённому документу на его

    запуск. Запускается редактор реестра, открытый с разделом, указанным в скопированном

    пути. Этот рекорд по краткости побить не удастся. Всем лентяям привет.

  9. Сергей Ткаченко

    @Anatoly
    Анатолий, я рад вас снова видеть. Ваши витиеватые комментарии ничто не заменит )

  10. Сергей Анваров

    Есть еще regjump из sysinernals utils. Тоже просто

    regjump "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

    еще и сам запустит regedit

    Т.к. на утилите подпись Microsoft, то обычный антивирус не посчитает этот файл опасным.

  11. AAA

    Здравствуйте . Подскажите , пожалуйста , как , всё же , пользоваться regjump . Скопировал в буфер обмена , а дальше то , что следует сделать ?

  12. Sergey

    Полагаю, запустить скрипт после этого

  13. AAA

    Сделал : работает . Но ярлык , будучи закреплённым на Панели задач , не срабатывает : ругается . Это можно ли поправить ?

  14. Sergey

    А на что ругается?

  15. ZoomBee

    Озадачился вопросом как открыть раздел реестра прямо из txt-редактора, получилось следующее (мож. кому пригодится):

    а) для AkelPad (с установленными плагинами):

    1. в папке ...\AkelFiles\Plugs\Scripts\ создать файл, например OpenInRegedit.txt, открыть блокнотом и вставить код:

    ' ==========================================================

    ' Скрипт для перехода в нужный раздел реестра одним кликом

    ' --------------------------------------------------------

    ' Выделить в тексте ветку реестра и запустить скрипт

    ' ==========================================================

    ' Вызов внутренней команды номер 4154 (Копировать/Ctrl+C):

    AkelPad.Command(4154)

    ' Запуск сторонней утилиты:

    AkelPad.Exec("Путь_к_\RegOwnershipEx\RegOwnershipEx.exe /j")

    ' Всё что закомментировано (в начале строки знак ') можно выкинуть.

    2. поменять расширение с .txt на .vbs, в контекстном меню щелкнуть пункт подменю "Скрипты...", откроется табличка, в ней выбрать и запустить OpenInRegedit.vbs. Дальше скрипт можно будет запускать через пункт подменю "Последний вызванный".

    b) для Notepad++ (тут без бубна не обойтись ):

    1. в меню "Запуск" щёлкнуть первый пункт (или просто нажать на клаве F5), появится окошко в котором нужно ввести путь к утилите RegOwnershipEx.exe и нажать 'Сохранить', в подменю появится соответствующий пункт;

    2. через Plugin Manager (Плагины --> Plugin Manager --> Show Plugin Manager) скачать 'ActiveX Plugin', зарегистрировать и перезапустить npp;

    3. в папке программы создать подпапку Scripts (по желанию, можно и не делать), в ней создать файл OpenInRegedit.vbs в который вставить код:

    ' ================================================================

    ' Скрипт для перехода в нужный раздел реестра одним кликом

    ' --------------------------------------------------------

    ' Выделить в тексте ветку реестра и запустить скрипт

    ' ================================================================

    Dim oNppApplication

    On Error Resume Next

    Set oNppApplication = NppApplication

    On Error GoTo 0

    If IsEmpty(oNppApplication) Then

    Set oNppApplication = CreateObject("NotepadPlusPlus.Application")

    End If

    ' Выделенный текст копируется в буфер обмена:

    Call oNppApplication.activeEditor.copyText()

    ' Выполняется десятый пункт подменю восьмого пункта меню (

    ' Меню: Файл(File)=0, Правка(Edit)=1, ... Запуск(Run)=8;

    ' Подменю: Запуск.../F5(Run...)=1, ... RegOwnershipEx=10 ):

    Call oNppApplication.menu(8).submenu(10).execute()

    ' Чё делать с закомментированным см. в предыдущем скрипте.

    (прим.: пункт подменю может отличаться по номеру, считайте сверху вниз, разделители не считаются)

    4. открыть меню 'Плагины', выбрать 'ActiveX Plugin' --> 'Settings...', в открывшемся окне вставить полный путь к OpenInRegedit.vbs.

    Всё, скрипт можно запускать пунктом 'Execute script 1' (или куда вы там его вписали) в 'ActiveX Plugin'.

    Кому принципиально важно, чтоб всё было в одном скрипте штудируйте гайды к этим блокнотам - там наверняка найдёте ответ: как подменять короткие ключи (HCU) длинными (HKEY_CURRENT_USER), лично мне лень, да и к npp Help на буржуйском языке и вообще вéлик с квадратными колёсами (RegOwnershipEx) мне больше нравится чем с треугольными (script.vbs≈9000MB).

    З.Ы. Будет ли ругаться UAC? Понятия не имею, он у меня отключен. Win7x32 полёт нормальный .

  16. Sergey

    Спасибо за решение, весьма неожиданно и познавательно!

Написать комментарий