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

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

В своих статьях я довольно часто пишу «перейдите в раздел реестра 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

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

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