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

RegOwnershipEx 1.0.0.1

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

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

Редактор реестра (regedit.exe), начиная с Windows 2000, обладает одной полезной особенностью: он «запоминает» последний раздел, который был открыт в нем до того, как пользователь закрыл программу. Полный путь к этому разделу  пишется в параметр Lastkey строкового типа в ключе [code]HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit[/code] Для нашей задачи можно (и удобно) воспользоваться этой возможностью. Если заранее записать туда путь, который нам нужен в данный момент, то открыв редактор реестра, никуда переходить не потребуется.

Реализация

Некоторое время назад я создал утилиту 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 в разделе [code]HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit[/code] Для этого допишем в скрипт следующее:

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. Осталось создать ярлык на запуск скрипта с командой вида[code]wscript d:\regnav.vbs[/code]

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

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


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

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

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

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

  3. Вот чем меня бесит «этот вордпресс» писал, старался, комментарий, но забыл заполнить имя и мыло (бывает), отправил — получил ошибку — вернулся… и всё пропало, второй раз писать желание не возникло 🙁

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

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

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

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

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

  6. Я снова стащил скрипт, как и год назад. Вопреки ожиданиям скрипт на Windows8 работает. Чтобы посодействовать поглощению пиара, добавлю, что достаточно
    лишь сохранить скопированный скрипт, и никаких ярлыков не создавать. Далее, выделив путь, копируем его, но вместо вставки щёлкаем по сохранённому документу на его
    запуск. Запускается редактор реестра, открытый с разделом, указанным в скопированном
    пути. Этот рекорд по краткости побить не удастся. Всем лентяям привет.

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

  7. Есть еще regjump из sysinernals utils. Тоже просто:
    regjump "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
    еще и сам запустит regedit
    Т.к. на утилите подпись Microsoft, то обычный антивирус не посчитает этот файл опасным.

Обсуждение закрыто.