|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Утилита для перехода в заданный раздел реестра |
|
[решено] Утилита для перехода в заданный раздел реестра
|
(*.*) Сообщения: 36491 |
Профиль | Сайт | Отправить PM | Цитировать Исходники версии 0.6 входят в комплект с программой. Текущий скрипт для компиляции утилиты Текущий скрипт для тех, кто желает выбрать способ перехода в реестр Текущий английский языковой файл (образец для перевода) Разработка: AZJIO Промежуточные решения Оболочка для regjump Без сторонних утилит Без сторонних утилит (с запоминанием ввода путей) |
|
------- Отправлено: 16:09, 19-12-2010 |
(*.*) Сообщения: 36491
|
Профиль | Сайт | Отправить 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 |
(*.*) Сообщения: 36491
|
Профиль | Сайт | Отправить 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 |
(*.*) Сообщения: 36491
|
Профиль | Сайт | Отправить 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 |
(*.*) Сообщения: 36491
|
Профиль | Сайт | Отправить 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 |
|