|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Утилита для перехода в заданный раздел реестра |
|
|
[решено] Утилита для перехода в заданный раздел реестра
|
|
(*.*) Сообщения: 36572 |
Исходники версии 0.6 входят в комплект с программой. Текущий скрипт для компиляции утилиты Текущий скрипт для тех, кто желает выбрать способ перехода в реестр Текущий английский языковой файл (образец для перевода) Разработка: AZJIO Промежуточные решения Оболочка для regjump Без сторонних утилит Без сторонних утилит (с запоминанием ввода путей) |
|
|
------- Отправлено: 16:09, 19-12-2010 |
|
(*.*) Сообщения: 36572
|
Профиль | Сайт | Отправить PM | Цитировать Цитата madmasles:
Видимо, нужно более тонкое решение. |
|
|
------- Отправлено: 18:29, 19-12-2010 | #11 |
|
Старожил Сообщения: 215
|
Профиль | Отправить PM | Цитировать ; Simple GUI wrapper for regjump http://technet.microsoft.com/en-us/sysinternals/bb963880
; regjump must reside in %path%
; Run the script elevated when UAC is on
#RequireAdmin
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1) ; Change to OnEvent mode
Global $hGUI, $hInput, $nButton, $sExePath = "regjump.exe"
$hGUI = GUICreate("JumpReg", 400, 100)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
GUICtrlCreateLabel("Путь к разделу реестра:", 20, 10)
$hInput = GUICtrlCreateInput("", 20, 30, 360, 20)
$nButton = GUICtrlCreateButton("Jump", 170, 60, 60) ;Registry path input field
GUICtrlSetOnEvent($nButton, "OKButton")
Dim $AccelKeys[1][2]=[["{ENTER}", $nButton]]
GUISetAccelerators($AccelKeys)
GUISetState(@SW_SHOW)
While 1
Sleep(1000) ; Idle around
WEnd
Func OKButton()
Local $sPath = GUICtrlRead($hInput) ;)
If $sPath = "" Then Return 0
Run(@ComSpec & " /c " & $sExePath & " " & $sPath, "", @SW_HIDE)
;Run("regjump.exe" & " " & GUICtrlRead($path), "", @SW_SHOW) ;works, but shows cmd window
EndFunc
Func _Exit()
Exit
EndFunc
;
|
|
------- Последний раз редактировалось Vadikan, 19-12-2010 в 19:19. Причина: блок когда глючит, не отображал последнюю строку Отправлено: 18:42, 19-12-2010 | #12 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Добавить стиль кнопки «Default» ($BS_DEFPUSHBUTTON):
; Simple GUI wrapper for regjump http://technet.microsoft.com/en-us/sysinternals/bb963880
; regjump must reside in %path%
; Run the script elevated when UAC is on
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
AutoItSetOption("MustDeclareVars", 1)
AutoItSetOption("GUIOnEventMode", 1) ; Change to OnEvent mode
Local $mainwindow = GUICreate("JumpReg", 400, 100)
GUICtrlCreateLabel("Путь к разделу реестра:", 10, 10)
Local $path = GUICtrlCreateInput("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer", 10, 30, 400 - 10 * 2, 20)
Local $btnJump = GUICtrlCreateButton("Jump", (400 - 120) / 2, 60, 120, 30, $BS_DEFPUSHBUTTON) ;Registry path input field
GUICtrlSetOnEvent($btnJump, "fnOKButton")
GUISetOnEvent($GUI_EVENT_CLOSE, "fnGUIClose")
GUISetState(@SW_SHOW)
While 1
Sleep(100) ; Idle around
WEnd
Func fnOKButton()
Run("regjump.exe """ & GUICtrlRead($path) & """", "");, @SW_HIDE)
EndFunc
Func fnGUIClose()
Exit
EndFunc
что редактор реестра тоже запускается в скрытом окне. |
|
Отправлено: 19:01, 19-12-2010 | #13 |
|
Старожил Сообщения: 206
|
Профиль | Отправить PM | Цитировать Здесь вообще regjump.exe не нужен. За все отвечает параметр Lastkey в разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit.
#Include <GUIConstantsEx.au3>
Dim $Accel[1][2]=[['{ENTER}', 0]]
$hForm = GUICreate('JumpReg', 400, 95)
GUICtrlCreateLabel ('Путь к разделу реестра:', 20, 10)
$Input = GUICtrlCreateInput('', 20, 30, 360, 20)
$Button = GUICtrlCreateButton("Jump", 170, 60, 60)
$Accel[0][1] = GUICtrlCreateDummy()
GUISetAccelerators($Accel)
GUISetState()
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
Exit
Case $Accel[0][1]
GUICtrlSetState($Button, $GUI_FOCUS)
ContinueCase
Case $Button
If Not _RegJump(GUICtrlRead($Input)) Then
MsgBox(16, 'Ошибка', 'Неверный путь.')
GUICtrlSetState($Input, $GUI_FOCUS)
EndIf
EndSwitch
WEnd
Func _RegJump($sKey)
Local $Root, $Text = StringSplit($sKey, '\', 2)
If IsArray($Text) Then
$Text = $Text[0]
Else
$Text = $sKey
EndIf
Switch $Text
Case 'HKEY_CLASSES_ROOT', 'HKEY_CURRENT_USER', 'HKEY_LOCAL_MACHINE', 'HKEY_USERS', 'HKEY_CURRENT_CONFIG'
$Root = $Text
Case 'HKCR'
$Root = 'HKEY_CLASSES_ROOT'
Case 'HKCU'
$Root = 'HKEY_CURRENT_USER'
Case 'HKLM'
$Root = 'HKEY_LOCAL_MACHINE'
Case 'HKU'
$Root = 'HKEY_USERS'
Case 'HKCC'
$Root = 'HKEY_CURRENT_CONFIG'
Case Else
Return 0
EndSwitch
Local $Class = '[CLASS:RegEdit_RegEdit]', $Delay = Opt('WinWaitDelay', 0)
Local $Prev, $Result = 1
If WinExists($Class) Then
WinClose($Class)
If Not WinWaitClose($Class, '', 5) Then
$Result = 0
EndIf
EndIf
If $Result Then
$Prev = RegRead('HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit', 'Lastkey')
If @error Then
$Prev = 0
EndIf
If Not RegWrite('HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit', 'Lastkey', 'REG_SZ', StringReplace($sKey, $Text, $Root, 1)) Then
$Result = 0
Else
If Not Run('regedit.exe') Then
$Result = 0
If IsString($Prev) Then
RegWrite('HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit', 'Lastkey', 'REG_SZ', $Prev)
EndIf
EndIf
EndIf
EndIf
Opt('WinWaitDelay', $Delay)
Return $Result
EndFunc ;==>_RegJump
|
|
Отправлено: 19:02, 19-12-2010 | #14 |
|
(*.*) Сообщения: 36572
|
Профиль | Сайт | Отправить PM | Цитировать SyDr, большое спасибо, так работает, только функцию закрыть осталось в конце. За повышение отдельное спасибо
По ходу возникла такая мысль еще... Можно ли как-то записывать введенные пути (историю) текущей сессии и выводить ее? Например, вместо inputbox использовать combo со списком введенных путей. Чувствую, нужен массив ![]() P.S. Тему переименую. Iska, да, нужно @SW_SHOW, но тогда видна консоль... Yashied, спасибо, так тоже работает. Но как видите, я пошел по самому простому пути, поскольку не владею вопросом в нужной степени ![]() |
|
------- Отправлено: 19:10, 19-12-2010 | #15 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Vadikan, Вы не могли бы проверить, вот эта утилита работает под «Windows 7»?
|
|
Отправлено: 19:18, 19-12-2010 | #16 |
|
(*.*) Сообщения: 36572
|
Профиль | Сайт | Отправить PM | Цитировать Iska, проверял, работает... но только пару запусков, после чего запускается свернутой и не хочет вылезать из панели задач
Пробовал в режимах совместимости на двух разных машинах, потратил время и забил. Собственно после этого и возникла мысль сделать самому и с помощью коллег.В принципе, избранное - удобная вещь, но оно и в редакторе есть в конце концов. А вот во время текущей сессии часто бывают переходы в одни и те же разделы реестра, когда ковыряешься. |
|
------- Отправлено: 19:23, 19-12-2010 | #17 |
|
Старожил Сообщения: 206
|
Профиль | Отправить PM | Цитировать Цитата Vadikan:
#Include <GUIComboBox.au3>
#Include <GUIConstantsEx.au3>
#Include <WinAPIEx.au3>
Global Const $MRU_MAX_SIZE = 26
Dim $Accel[1][2] = [['{ENTER}', 0]]
$hForm = GUICreate('JumpReg', 400, 93)
GUICtrlCreateLabel('Путь к разделу реестра:', 20, 10)
$Combo = GUICtrlCreateCombo('', 20, 30, 360, 21)
_LoadMRUList()
$Button = GUICtrlCreateButton("Jump", 170, 60, 60, 23)
$Accel[0][1] = GUICtrlCreateDummy()
GUISetAccelerators($Accel)
GUISetState()
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
_SaveMRUList()
Exit
Case $Accel[0][1]
GUICtrlSetState($Button, $GUI_FOCUS)
ContinueCase
Case $Button
$Path = _GUICtrlComboBox_GetEditText($Combo)
If Not _RegJump($Path) Then
MsgBox(16, 'Ошибка', 'Неверный путь или еще что-нибудь.')
GUICtrlSetState($Combo, $GUI_FOCUS)
Else
_AddPath($Path)
EndIf
EndSwitch
WEnd
Func _AddPath($sPath)
Local $Count = _GUICtrlComboBox_GetCount($Combo)
Local $Item, $Lenght
For $i = 0 To $Count - 1
_GUICtrlComboBox_GetLBText($Combo, $i, $Item)
If $Item = $sPath Then
_GUICtrlComboBox_SetCurSel($Combo, $i)
Return
EndIf
If $i = $MRU_MAX_SIZE - 1 Then
_GUICtrlComboBox_DeleteString($Combo, $i)
ExitLoop
EndIf
Next
_GUICtrlComboBox_InsertString($Combo, $sPath, 0)
_GUICtrlComboBox_SetCurSel($Combo, 0)
EndFunc ;==>_AddPath
Func _LoadMRUList()
Local $hMRU = _WinAPI_CreateMRUList($HKEY_CURRENT_USER, 'Software\Vadikan\MRU', $MRU_MAX_SIZE)
Local $Count = _WinAPI_EnumMRUList($hMRU, -1)
For $i = $Count - 1 To 0 Step -1
_AddPath(_WinAPI_EnumMRUList($hMRU, $i))
Next
_WinAPI_FreeMRUList($hMRU)
EndFunc ;==>_LoadMRUList
Func _RegJump($sKey)
Local $Root, $Text = StringSplit($sKey, '\', 2)
If IsArray($Text) Then
$Text = $Text[0]
Else
$Text = $sKey
EndIf
Switch $Text
Case 'HKEY_CLASSES_ROOT', 'HKEY_CURRENT_USER', 'HKEY_LOCAL_MACHINE', 'HKEY_USERS', 'HKEY_CURRENT_CONFIG'
$Root = $Text
Case 'HKCR'
$Root = 'HKEY_CLASSES_ROOT'
Case 'HKCU'
$Root = 'HKEY_CURRENT_USER'
Case 'HKLM'
$Root = 'HKEY_LOCAL_MACHINE'
Case 'HKU'
$Root = 'HKEY_USERS'
Case 'HKCC'
$Root = 'HKEY_CURRENT_CONFIG'
Case Else
Return 0
EndSwitch
Local $Class = '[CLASS:RegEdit_RegEdit]', $Delay = Opt('WinWaitDelay', 0)
Local $Prev, $Result = 1
If WinExists($Class) Then
WinClose($Class)
If Not WinWaitClose($Class, '', 5) Then
$Result = 0
EndIf
EndIf
If $Result Then
$Prev = RegRead('HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit', 'Lastkey')
If @error Then
$Prev = 0
EndIf
If Not RegWrite('HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit', 'Lastkey', 'REG_SZ', StringReplace($sKey, $Text, $Root, 1)) Then
$Result = 0
Else
If Not Run('regedit.exe') Then
$Result = 0
If IsString($Prev) Then
RegWrite('HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit', 'Lastkey', 'REG_SZ', $Prev)
EndIf
EndIf
EndIf
EndIf
Opt('WinWaitDelay', $Delay)
Return $Result
EndFunc ;==>_RegJump
Func _SaveMRUList()
Local $hMRU = _WinAPI_CreateMRUList($HKEY_CURRENT_USER, 'Software\Vadikan\MRU', $MRU_MAX_SIZE)
Local $Count = _GUICtrlComboBox_GetCount($Combo)
Local $Path
For $i = $Count - 1 To 0 Step -1
_GUICtrlComboBox_GetLBText($Combo, $i, $Path)
_WinAPI_AddMRUString($hMRU, $Path)
Next
_GUICtrlComboBox_GetLBText($Combo, _GUICtrlComboBox_GetCurSel($Combo), $Path)
_WinAPI_AddMRUString($hMRU, $Path)
_WinAPI_FreeMRUList($hMRU)
EndFunc ;==>_SaveMRUList
Правда для запуска этого скрипта понадобится библиотека WinAPIEx UDF. Но если не интересует сохранение в реестре последних открываемых разделов для последующей их загрузки в список, то WinAPIEx UDF не нужен. Так же нужно будет удалить из кода две функции: _LoadMRUList() и _SaveMRUList(). Константа $MRU_MAX_SIZE в самом начале кода задает максимальное количество записей в списке (по умолчанию 26). P.S При жедании можно еще добавить Autocomplete. |
|
|
Отправлено: 20:05, 19-12-2010 | #18 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Vadikan:
|
|
|
Отправлено: 20:07, 19-12-2010 | #19 |
|
(*.*) Сообщения: 36572
|
Профиль | Сайт | Отправить PM | Цитировать Yashied, супер, спасибо! Только сохранение путей я перевел в JumpReg вместо Vadikan.
Я уверен, что утилита сэкономит немало времени тем, кто лучшие годы своей жизни проводит в реестре На самом деле, во время написания статей про кнопки на панели проводника я вдруг осознал, что помню наизусть начальные символы некоторых GUID'ов О_о |
|
------- Отправлено: 20:21, 19-12-2010 | #20 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| Доступ - [решено] Почему параметры реестра импортируются в раздел WOW6432Node | loveaboveall | Microsoft Windows 7 | 17 | 17-01-2011 12:13 | |
| CMD/BAT - [решено] Смена прав на раздел реестра и его удаление | primewar | Скриптовые языки администрирования Windows | 20 | 30-11-2010 22:17 | |
| Утилиты - [addon] ERUNT - утилита для бэкапа реестра. | Boa Soft | Наборы обновлений для Windows XP/2003/Windows 7 | 18 | 03-10-2010 18:24 | |
| Интерфейс - [решено] Ярлык для перехода в режимы сна в Vista x64 SP2 | BBeard | Microsoft Windows Vista | 5 | 29-06-2009 11:42 | |
| [решено] Невозможно удалить раздел реестра | alexandri | Microsoft Windows 2000/XP | 5 | 18-01-2007 09:09 | |
|