Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Утилита для перехода в заданный раздел реестра

Ответить
Настройки темы
[решено] Утилита для перехода в заданный раздел реестра

(*.*)


Сообщения: 36491
Благодарности: 6675


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать




Исходники версии 0.6 входят в комплект с программой.

Текущий скрипт для компиляции утилиты
Текущий скрипт для тех, кто желает выбрать способ перехода в реестр
Текущий английский языковой файл (образец для перевода)

Разработка: AZJIO



Промежуточные решения
Оболочка для regjump
Без сторонних утилит
Без сторонних утилит (с запоминанием ввода путей)

С чего все начиналось
Я сделал простенькую оболочку для утилиты regjump, поскольку так и не смог найти корректно работающий аналог под 7.




Код: Выделить весь код
; 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>

Opt("GUIOnEventMode", 1)  ; Change to OnEvent mode 
$mainwindow = GUICreate("JumpReg", 400, 100)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
GUICtrlCreateLabel ("Путь к разделу реестра:", 20, 10)
$path = GUICtrlCreateInput("", 20, 30, 360, 20)
$jumpbtn = GUICtrlCreateButton("Jump", 170, 60, 60) ;Registry path input field
GUICtrlSetOnEvent($jumpbtn, "OKButton")
GUISetState(@SW_SHOW)
$exe = "regjump.exe "

While 1
  Sleep(1000)  ; Idle around
WEnd

Func OKButton()
  $jump = $exe & GUICtrlRead($path)
  Run(@ComSpec & " /c " & $jump, "", @SW_HIDE)
 ;Run("regjump.exe" & " " & GUICtrlRead($path), "", @SW_SHOW) ;works, but shows cmd window

EndFunc

Func CLOSEClicked()
  Exit
EndFunc
На большее моих знаний AutoIt и программирования в целом не хватает Но все-таки хотелось бы сделать так, чтобы после ввода раздела реестра в поле активной становилась кнопка. Это позволит просто нажимать Enter, вместо TAB+Enter.

Подскажете, как это сделать?

Спасибо.

P.S. Скрипт нужно запускать с полными правами.

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:09, 19-12-2010

 

Аватара для AZJIO

Старожил


Сообщения: 254
Благодарности: 126

Профиль | Отправить PM | Цитировать


Vadikan, для себя когда то делал jumpreg, сегодня обновил немного. Кнопкам можно назначить хоткей функцией GUISetAccelerators, которая назначает выполнение хоткея только в текущем окне и только для элементов текущего окна. Разделы реестра (ветки) хранятся в ini, так мне проще пользоваться в чужой системе или в LiveCD. Или импортировать ini в избранное regedit.
+ активность инпута после прыжка.
+ переход уровнем выше, если раздела не существует (проверка до корневого).
+ Избранное
+ Старт вверху экрана в виде компактной панели

без заголовка, с перетаскиванием за окно, не редактируемый комбобокс
читать дальше »
Код: Выделить весь код
#AutoIt3Wrapper_Outfile=JumpReg.exe
#AutoIt3Wrapper_Icon=JumpReg.ico
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseAnsi=y
#AutoIt3Wrapper_Res_Comment=
#AutoIt3Wrapper_Res_Description=JumpReg.exe
#AutoIt3Wrapper_Res_Fileversion=0.3.0.0
#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=n
#AutoIt3Wrapper_Res_LegalCopyright=AZJIO
#AutoIt3Wrapper_Res_Language=1049
#AutoIt3Wrapper_Run_Au3check=n

;  @AZJIO 24.12.2010 (AutoIt3_v3.3.6.1)
$kol_item=26 ; количество пунктов в комбобоксе
$Xsz=81
Switch @OSVersion
    Case 'WIN_VISTA', 'WIN_7'
        $Xsz=89
EndSwitch
#RequireAdmin
#NoTrayIcon
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <MenuConstants.au3>
Opt("GUIResizeMode", 0x0322)
GUIRegisterMsg(0x0024, "WM_GETMINMAXINFO")
; HotKeySet("!{ESC}", "_restart") ; для теста утилиты

Global $aRecords
Global $Ini = @ScriptDir & '\JumpRegFav.ini'
$FileTmp=''

If Not FileExists($Ini) And MsgBox(4, "Выгодное предложение", "Хотите создать необходимый JumpRegFav.ini" & @CRLF & "для сохранения вводимых параметров?")=6 Then
$file = FileOpen($Ini,2)
FileWrite($file, '[Favorites]' & @CRLF & _
'; отсчёт Favorites со второй строки. После разделителя | можно указать имя, иначе имя последнее после \.' & @CRLF & _
'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders|Папки пользователя' & @CRLF & _
'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders|Папки пользователя 2' & @CRLF & _
'HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment|Переменные среды' & @CRLF & _
'HKEY_CURRENT_USER\Environment|Переменные среды текущего' & @CRLF & _
'HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices' & @CRLF & _
'HKEY_CLASSES_ROOT\Folder' & @CRLF & _
'HKEY_CLASSES_ROOT\Directory' & @CRLF & _
'HKEY_CLASSES_ROOT\Drive' & @CRLF & _
'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced')
FileClose($file)
EndIf

If Not _FileReadToArray($Ini, $aRecords) Then
	Dim $aRecords[4]=['3', '', '', 'HKEY_CURRENT_USER\Software']
Else
	$file = FileOpen($Ini, 0)
	$FileTmp = FileRead($file)
	FileClose($file)
EndIf

$GUI=GUICreate("Прыжок в указанный раздел реестра", 548, 75, -1, 0, BitOR($WS_POPUP, $WS_THICKFRAME, $WS_SIZEBOX, $WS_SYSMENU))
GUISetBkColor(0x3f3f3f)


$ActM=GUICtrlCreateMenu('&Меню')
; $Restart=GUICtrlCreateMenuitem('Перезапуск', $ActM) ; для теста утилиты
$runfav=GUICtrlCreateMenuitem('Открыть JumpRegFav.ini', $ActM)
$help=GUICtrlCreateMenuitem('Справка', $ActM)
$Quit=GUICtrlCreateMenuitem('Выход', $ActM)

$RegM=GUICtrlCreateMenu('&Regedit')
$favorites=GUICtrlCreateMenuitem('Добавить в Избранное', $RegM)
$Clean=GUICtrlCreateMenuitem('Очистить Избранное', $RegM)
$Save=GUICtrlCreateMenuitem('Экспорт истории', $RegM)
$ReHis=GUICtrlCreateMenuitem('Восстановить историю', $RegM)

$FavM=GUICtrlCreateMenu('&Избранное')


$list=''
For $i = 3 To $aRecords[0]
	If StringInStr($aRecords[$i], '|') Then
		$list&=StringRegExpReplace($aRecords[$i], '(.*?\|).*', '\1')
	Else
		$list&=$aRecords[$i]&'|'
	EndIf
Next

$list=StringTrimRight($list, 1)
$tmp=StringSplit($list, '|')
Dim $aList2[$tmp[0]+1][3]
$aList2[0][0]=$tmp[0]

For $i = 1 To $aList2[0][0]
	$aList2[$i][1]=$tmp[$i]
	$aList2[$i][0]=GUICtrlCreateMenuitem($aList2[$i][1], $FavM)
Next
$tmp=''
$list=RegRead('HKCU\Software\JumpRegAzjio', 'History')

; $HistM=GUICtrlCreateMenu('И&стория')
; $favorites=GUICtrlCreateMenuitem('HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit', $HistM)

$inpreg = GUICtrlCreateInput('', 7, 5, 512, 21)
GUICtrlSetResizing(-1, 2 + 4 +32 + 512 + 256)

$Jump = GUICtrlCreateButton("П", 519, 5, 21, 21, 0x0040)
GUICtrlSetTip(-1, "Открыть regedit с переходом" & @CRLF & "в указанный раздел реестра." & @CRLF & "Enter")
GUICtrlSetResizing(-1, 512 + 256 +32+ 4)
GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', -138, 0)
; GUISetIcon('shell32.dll', -138)

$comboreg = GUICtrlCreateCombo("", 7, 26, 512+21, 18, 0x3)
GUICtrlSetResizing(-1, 2 + 4 +32)
If $list<>'' Then GUICtrlSetData(-1, $list, StringRegExpReplace($list, '(.*?)\|.*', '\1'))

$Editor=_EXE_Path('txt')
If @error Then $Editor=@SystemDir&'\notepad.exe'

Dim $AccelKeys[4][2] = [["{Enter}", $Jump],["^{UP}", $favorites],["^{DEL}", $Clean],["^{DOWN}", $Save]]
GUISetAccelerators($AccelKeys)

GUICtrlSetState($inpreg, 256)
GUISetState()

While 1
	$msg = GUIGetMsg()
	_SendMessage($Gui, $WM_SYSCOMMAND, BitOR($SC_MOVE, $HTCAPTION), 0) ; для перемещения окна за само окно
	
	For $i = 1 To $aList2[0][0]
		If $msg = $aList2[$i][0] Then GUICtrlSetData($inpreg, $aList2[$i][1])
	Next
	
	Select
		Case $msg = $comboreg
			$comboreg0 = GUICtrlRead($comboreg)
			GUICtrlSetData($inpreg, $comboreg0)
		Case $msg = $Clean
			If MsgBox(4, "Сообщение", "Вы точно хотите полностью очистить" & @CRLF & "Избранное в Regedit?")=7 Then ContinueLoop
			RegDelete("HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\Favorites")
			GUICtrlSetState($inpreg, 256)

		Case $msg = $favorites
			If MsgBox(4, "Сообщение", "Вы точно хотите добавить разделы" & @CRLF & "из JumpRegFav.ini в Избранное Regedit?")=7 Then ContinueLoop
			For $i = 3 To $aRecords[0]
				If StringInStr($aRecords[$i], '|') Then
					$aReg = StringSplit($aRecords[$i], "|")
				Else
					Dim $aReg[3]
					$aReg[2] = StringRegExpReplace('t\\'&$aRecords[$i], "(^.*)\\(.*)$", '\2')
					$aReg[1] = $aRecords[$i]
				EndIf
				If StringLeft($aReg[1], 2)<>'HK' Then ContinueLoop
				RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\Favorites", $aReg[2], "REG_SZ", 'Мой компьютер\' & $aReg[1])
			Next
			If ProcessExists("regedit.exe") <> 0 Then
				ContinueLoop
			Else
				Run('regedit.exe')
			EndIf
			GUICtrlSetState($inpreg, 256)

		Case $msg = $Jump
			If ProcessExists("regedit.exe") <> 0 Then
				ProcessClose("regedit.exe")
				ProcessWaitClose("regedit.exe")
			EndIf
			$comboreg0 = GUICtrlRead($inpreg)
			If StringRight($comboreg0, 1)='\' Then $comboreg0=StringTrimRight($comboreg0, 1)

			If StringInStr(';HKLM;HKU;HKCU;HKCR;HKCC;', ';' & StringRegExpReplace($comboreg0, '(.*?)\\.*', '\1') & ';') Then
				$aSmlNm = StringRegExp($comboreg0, '(^.*?)(\\.*)$', 3)
				If @error Then Dim $aSmlNm[2]=[$comboreg0, '']

				Switch $aSmlNm[0]
					Case 'HKLM'
						$aSmlNm[0] = 'HKEY_LOCAL_MACHINE'
					Case 'HKU'
						$aSmlNm[0] = 'HKEY_USERS'
					Case 'HKCU'
						$aSmlNm[0] = 'HKEY_CURRENT_USER'
					Case 'HKCR'
						$aSmlNm[0] = 'HKEY_CLASSES_ROOT'
					Case 'HKCC'
						$aSmlNm[0] = 'HKEY_CURRENT_CONFIG'
				EndSwitch
				$comboreg0 = $aSmlNm[0] & $aSmlNm[1]
			EndIf
			
			;проверяем существование раздела реестра
			If Not _Reg_Exists($comboreg0) Then
				While Not _Reg_Exists($comboreg0)
					$comboreg0=StringRegExpReplace($comboreg0, '(.*)\\.*', '\1')
					If @Extended=0 Then
						MsgBox(0, 'Ошибка', 'Ошибка имени корневого раздела')
						ContinueLoop 2
					EndIf
				WEnd
				If MsgBox(4, 'Ошибка', 'Раздел не существует.'&@CRLF&'Ближайший доступный раздел: '& _
				@CRLF&$comboreg0 &@CRLF&@CRLF& 'Перейти в него?')=7 Then ContinueLoop
			EndIf

			RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit","LastKey","REG_SZ",$comboreg0)
			Run('regedit.exe')
			; Run('regjump.exe '&$comboreg0)
			; Run('regjump.exe '&$comboreg0, '', @SW_HIDE)

			GUICtrlSendMsg($comboreg, 0x14B, 0, 0)
			If StringInStr('|'&$list&'|', '|'&$comboreg0&'|') Then 
				$list=StringReplace('|'&$list&'|', '|'&$comboreg0&'|', '|')
				$list=StringRegExpReplace($list, '^\|?(.*?)\|?$', '\1')
			EndIf
			If $list='' Then
				$list=$comboreg0
			Else
				$list=$comboreg0&'|'&$list
			EndIf
			StringReplace($list, '|', '|')
			If @extended>$kol_item Then $list=StringRegExpReplace($list, '(^.*)\|.*$', '\1')
			GUICtrlSetData($comboreg, $list, $comboreg0)
			GUICtrlSetState($inpreg, 256)
			RegWrite('HKCU\Software\JumpRegAzjio','History','REG_SZ',$list)

		Case $msg = $Save
			; RunWait('reg.exe export HKCU\Software\JumpRegAzjio "'&@ScriptDir & '\JumpRegSet.reg"', '', @SW_HIDE )
			If FileExists(@ScriptDir & '\JumpRegSet.reg') Then FileDelete(@ScriptDir & '\JumpRegSet.reg')
			RunWait(@SystemDir&'\reg.exe export HKCU\Software\JumpRegAzjio "'&@ScriptDir & '\JumpRegSet.reg"', '', @SW_HIDE )

		Case $msg = $ReHis
			If FileExists(@ScriptDir & '\JumpRegSet.reg') Then
				ShellExecuteWait(@ScriptDir&'\JumpRegSet.reg')
				GUICtrlSendMsg($comboreg, 0x14B, 0, 0)
				$list=RegRead('HKCU\Software\JumpRegAzjio', 'History')
				If $list<>'' Then GUICtrlSetData(-1, $list, StringRegExpReplace($list, '(.*?)\|.*', '\1'))
			EndIf
			
		Case $msg = $help
			MsgBox(0, 'Сообщение', 'Избранное хранится в JumpRegFav.ini (генерируется при отсутствии файла).'&@CRLF& _
			'Скрипт использовать при отсутствии удобного менеджера реестра.'&@CRLF&@CRLF&'		http://azjio.ucoz.ru/load'&@CRLF&'		AZJIO 24.12.2010')
		
		Case $msg = $runfav
			Run($Editor&' '&@ScriptDir & '\JumpRegFav.ini')
			; Run(@SystemDir&'\notepad.exe '&@ScriptDir & '\JumpRegFav.ini')
		; Case $msg = $Restart
			; _restart()
		Case $msg = $Quit
			ExitLoop
	EndSelect
WEnd
			
Func _Reg_Exists($key)
	Local $Err=2
	RegEnumKey($key, 1)
	If @error Then $Err-=1
	RegEnumVal($key, 1)
	If @error Then $Err-=1
	If $Err=0 Then
		Return 0
	Else
		Return 1
	EndIf
EndFunc

Func WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam)
	#forceref $iMsg, $wParam
	If $hWnd = $GUI Then
		Local $tMINMAXINFO = DllStructCreate("int;int;" & _
				"int MaxSizeX; int MaxSizeY;" & _
				"int MaxPositionX;int MaxPositionY;" & _
				"int MinTrackSizeX; int MinTrackSizeY;" & _
				"int MaxTrackSizeX; int MaxTrackSizeY", _
				$lParam)
		DllStructSetData($tMINMAXINFO, "MaxTrackSizeX", 1280) ; максимальные размеры окна
		DllStructSetData($tMINMAXINFO, "MaxTrackSizeY", $Xsz)
		DllStructSetData($tMINMAXINFO, "MinTrackSizeX", 270) ; минимальные размеры окна
		DllStructSetData($tMINMAXINFO, "MinTrackSizeY", $Xsz)
	EndIf
EndFunc

Func _EXE_Path($type)
	$astype = RegRead('HKEY_CLASSES_ROOT\.'&$type, "")
	If @error = 1 Then Return SetError(1)
	$astype = RegRead('HKEY_CLASSES_ROOT\' & $astype & '\shell\open\command', "")
	If @error = 1 Then Return SetError(1)
	$aPathexe=StringRegExpReplace($astype, '(^.*)(exe|EXE)(.*)$', '\1')
	If @error = 1 Then Return SetError(1)
	$aPathexe = StringReplace($aPathexe, '"', '') & 'exe'
	Opt('ExpandEnvStrings', 1)
	If FileExists($aPathexe) Then
		$aPathexe=$aPathexe
		Opt('ExpandEnvStrings', 0)
		Return $aPathexe
	EndIf
	Opt('ExpandEnvStrings', 0)
	If FileExists(@SystemDir&'\'&$aPathexe) Then
		$aPathexe=@SystemDir&'\'&$aPathexe
		Return $aPathexe
	EndIf
EndFunc

;#include <File.au3>
Func _FileReadToArray($sFilePath, ByRef $aArray)
	Local $hFile = FileOpen($sFilePath, 0)
	If $hFile = -1 Then Return SetError(1, 0, 0)
	Local $aFile = FileRead($hFile, FileGetSize($sFilePath))
	If StringRight($aFile, 1) = @LF Then $aFile = StringTrimRight($aFile, 1)
	If StringRight($aFile, 1) = @CR Then $aFile = StringTrimRight($aFile, 1)
	FileClose($hFile)
	If StringInStr($aFile, @LF) Then
		$aArray = StringSplit(StringStripCR($aFile), @LF)
	ElseIf StringInStr($aFile, @CR) Then
		$aArray = StringSplit($aFile, @CR)
	Else
		If StringLen($aFile) Then
			Dim $aArray[2] = [1, $aFile]
		Else
			Return SetError(2, 0, 0)
		EndIf
	EndIf
	Return 1
EndFunc

Func _restart()
	Local $sAutoIt_File = @TempDir & "\~Au3_ScriptRestart_TempFile.au3"
	Local $sRunLine, $sScript_Content, $hFile

	$sRunLine = @ScriptFullPath
	If Not @Compiled Then $sRunLine = @AutoItExe & ' /AutoIt3ExecuteScript ""' & $sRunLine & '""'
	If $CmdLine[0] > 0 Then $sRunLine &= ' ' & $CmdLineRaw

	$sScript_Content &= '#NoTrayIcon' & @CRLF & _
			'While ProcessExists(' & @AutoItPID & ')' & @CRLF & _
			'   Sleep(10)' & @CRLF & _
			'WEnd' & @CRLF & _
			'Run("' & $sRunLine & '")' & @CRLF & _
			'FileDelete(@ScriptFullPath)' & @CRLF

	$hFile = FileOpen($sAutoIt_File, 2)
	FileWrite($hFile, $sScript_Content)
	FileClose($hFile)

	Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & $sAutoIt_File & '"', @ScriptDir, @SW_HIDE)
	Sleep(1000)
	Exit
EndFunc

Последний раз редактировалось AZJIO, 25-12-2010 в 16:43. Причина: обновил 11 раз

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:43, 22-12-2010 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


(*.*)


Сообщения: 36491
Благодарности: 6675

Профиль | Сайт | Отправить PM | Цитировать


AZJIO, да, потребность в утилите есть Идея с избранным, интересна, конечно, если на флэшке таскать.

Но у меня не работает этот скрипт в 7. Он просто открывает редактор реестра, полностью разворачивая окно (что не гуд). И при этом никуда не переходит. Запуск от имени админа ничего не меняет.

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 23:46, 22-12-2010 | #22


Аватара для AZJIO

Старожил


Сообщения: 254
Благодарности: 126

Профиль | Отправить PM | Цитировать


Vadikan, проверил в Win7, поправил скрипт в предыдущем моём посте. Всего лишь имя компа убрал в сохраняемой ветке последнего доступа. Ну и ещё поправки незначительные, убрал вкладки, добавил ресайз по ширине.

Цитата Vadikan:
полностью разворачивая окно
состояние окна сохраняется в том положении, в котором оно закрыто. Я смещаю утилиту вверх, окно regedit чуть ниже, и в таком положении открывается regedit в следующие разы.

Последний раз редактировалось AZJIO, 23-12-2010 в 04:41.


Отправлено: 02:38, 23-12-2010 | #23


(*.*)


Сообщения: 36491
Благодарности: 6675

Профиль | Сайт | Отправить PM | Цитировать


AZJIO, Так работает скрипт, конечно. Но есть несколько замечаний/пожеланий, если есть желание довести до ума и выпустить "в люди".
  • Нбх запуск от имени админа (#RequireAdmin)
  • Терминология неверная - ветка. Нужно использовать слово "раздел" везде.
  • Перезапуск regedit ни к чему - лишнее моргание окон. Почему нельзя просто переходить в раздел в уже открытом редакторе?
  • Мой компьютер - работает только в локализованных ОС, нужно универсальное решение.
  • Запрос с предложением создать INI лишний. Его можно создавать и без запроса, закомментировав объяснение, как править руками. Далее...
  • История... Вообще, я не уверен, что нужно хранить неограниченное кол-во записей - 26 было достаточно, как в скрипте Yashied. И без всяких дополнительных файлов обходилось. А можно с Autoit сделать комбо-кнопку История? http://msdn.microsoft.com/en-us/maga...163384.aspx#S1 Под нее можно загнать Просмотр и Очистка (удаление всех записей). Заодно не нужна будет непонятная кнопка INI. Возможно, стоит сразу открывать в Блокноте, т.к. неопытный юзер не поймет, какой программой открывать файл (по умолчанию INI ни с чем не ассоциирован).
  • Управление избранным не очень удачное.
    а) При добавлении нужно подтверждающий диалог - Раздел добавлен в избранное редактора реестра (ОК)
    б) Очистка избранного затирает все записи, даже если у юзера были свои. Это неправильно.

По поводу последних двух пунктов. Вообще, добавление избранного реализовано в regedit, незачем дублировать функции. Вместо этого лучше реализовать избранное утилиты в INI файле! А историю хранить в реестре, методом Yashied. Если честно, я сначала подумал, что Избранное - это избранное утилиты... И я уверен, что не я один такой буду

Конечно, нужно будет продумать запись в избранное (собственное имя для раздела реестра) и выбор из Избранного (какой-то список, комбо-кнопка и т.д).

Что думаете?

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 13:21, 23-12-2010 | #24


Аватара для AZJIO

Старожил


Сообщения: 254
Благодарности: 126

Профиль | Отправить PM | Цитировать


Vadikan,
Первые два пункта выполнил.

Прыжок сейчас осуществляется за счёт того, что при закрытии реестра он сохраняет последний открытый раздел и открывает в том же месте. То есть приходится закрывать regedit, вставить полный путь раздела реестра и снова открыть уже в эом месте. Посмотрел старую утилиту regjump.exe, она открывает без перезапуска regedit, можно ей передать путь в ком-строке. Как в Win7 не смотрел, но в WinXP вроде не видел команд перехода в ком-строке без сторонних утилит.

Цитата Vadikan:
Запрос с предложением создать INI лишний »
Я утилитку в LiveCD использовал, а там некоторые программы вылетали при попытке создать свой ini, поэтому я сделал возможность не создавать, хотя можно проверить доступность записи, но ещё этот диалог как бы предупреждает при первом старте что настройки будут храниться в ini, а потом об этом уже не напоминается. Поэтому вроде не критично.

На счёт истории: хотелось бы избранное иметь и отдельно историю. То есть сделать нередактируемый комбобокс, при выборе в котором происходит вставка раздела в инпут и открытие по Enter. А для истории второй такой же комбобокс. Получается и раздельное наполнение. На счёт хранения в реестре истории - можно галочку сделать "Хранить в реестре (иначе в ini)". Нередактируемый комбобокс не такой красивый как кнопка, но те же свойства, раскрывается по клику в поле, а не только на стрелке.
Неассоциированность ini уже есть функция... откроется в том редакторе, в котором ассоциирован txt (хотя можно и блокнот жёстко указать).
Для Избранного диалог сделаю. Может сделать главное меню, чтоб туда кнопки убрать, кроме "прыжок".
Мне приходится настраивать компы, и там обычно меню "Избранное" со 100% гарантией отсутствует, поэтому я добавляю утилитой, чтоб потом без перезапуска смотреть некоторые необходимые мне ветки. А в утилите первый раздел ini как бы и есть избранное. Только я не вижу разницы, что в утилите делать кнопочки добавления в избранное ( по сути редактирование ini), что открыть в блокноте и редактировать, там же как то наглядней.

Обновил скрипт, ограничение на 26 пунктов комбобокса добавил.

Последний раз редактировалось AZJIO, 23-12-2010 в 21:23.


Отправлено: 18:20, 23-12-2010 | #25


(*.*)


Сообщения: 36491
Благодарности: 6675

Профиль | Сайт | Отправить PM | Цитировать


Цитата AZJIO:
Прыжок сейчас осуществляется за счёт того, что при закрытии реестра он сохраняет последний открытый раздел и открывает в том же месте. »
Понятно, я не обратил внимания, что Yashied сделал так же - я-то использовал regjump. Ну это не критично тогда.
Цитата AZJIO:
хотелось бы избранное иметь и отдельно историю »
Да, но у вас сейчас в INI файл есть возможность сохранить только всю историю, а не выборочно. Я предлагаю разграничить и вообще не хранить ее в INI, оставив его только для избранного. И галочка отдельная не нужна. Тем более, что
Цитата AZJIO:
А в утилите первый раздел ini как бы и есть избранное. »
Избранное, которое вы открываете, все равно будет попадать в историю, т.е. доступно в раскрывающемся списке. Ну а невозможность записи INI можно проверять, и просто выводить ошибку в случае отлупа.

Цитата AZJIO:
То есть сделать нередактируемый комбобокс, при выборе в котором происходит вставка раздела в инпут и открытие по Enter. А для истории второй такой же комбобокс. »
Для истории вполне работает раскрывающийся список, как сейчас. А для отображения избранного, можно не комбобокс, а меню, как в regedit. Туда можно добавить пункт "Скопировать избранное в редактор реестра" в конце концов, раз вам эта фича нужна (и другим пригодится).

Цитата AZJIO:
Неассоциированность ini уже есть функция... откроется в том редакторе, в котором ассоциирован txt »
У меня предложило выбрать приложение...

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 21:43, 23-12-2010 | #26


Аватара для AZJIO

Старожил


Сообщения: 254
Благодарности: 126

Профиль | Отправить PM | Цитировать


Vadikan, переделал, обновил предыдущий пост... Утилита при старте вверху экрана, инпут для ввода и история-комбобокс. А избранное в "главном меню". Кнопка прыжок мелкая слева справа от инпута, дабы оставить высоту утилиты максимально узкой как и должна быть панель. Стиль теперь "без заголовка окна" с перемещением за окно.

С regjump.exe не вышло, он тоже моргает дос окном, а скрыть не получается, только вместе с regedit. Можно попытаться управлять деревом regedit'а.

Последний раз редактировалось AZJIO, 24-12-2010 в 06:21.


Отправлено: 01:27, 24-12-2010 | #27


(*.*)


Сообщения: 36491
Благодарности: 6675

Профиль | Сайт | Отправить PM | Цитировать


Цитата AZJIO:
. Кнопка прыжок будет мелкая слева от инпута »
Лучше уж справа, как когда-то в адресных строках у браузеров... Тем более, если будут выбирать из списка истории, стрелка-то справа будет - ближе тянуться

Заголовок окна лучше оставить, так будет больше похоже на обычную программу

Ждем-с

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 02:11, 24-12-2010 | #28


Аватара для AZJIO

Старожил


Сообщения: 254
Благодарности: 126

Профиль | Отправить PM | Цитировать


После проверки в Win7 обновил ещё раз.
Всё-таки как лучше, текущий вариант без заголовка, но перемещать можно за само окно (сворачивание не работает, не критично) или вернуть заголовок с учётом увеличения ширина на 20-30 пикселей.

Удобство дополнительного комбобокса только в том что можно кликать по всей его площади. Либо сделать один комбобок и постоянно метится в стрелку раскрытия.

Последний раз редактировалось AZJIO, 24-12-2010 в 06:38.


Отправлено: 05:29, 24-12-2010 | #29


(*.*)


Сообщения: 36491
Благодарности: 6675

Профиль | Сайт | Отправить PM | Цитировать


AZJIO,

Уже ближе к финалу

1. Я бы все-таки вернул заголовок окна со всеми атрибутами - это понятнее, и не нужно будет делать "Выход" в "Меню" (см. #5 ниже). Не вижу особого смысла прикреплять окно вверху экрана, лучше по центру, как обычно.
2. Непонятно, почему нельзя было совместить поле ввода с раскрывающимся списком истории. Лишний элемент сейчас.
3. При установке курсора в поле он начинает дрожать, превращаясь то в стрелку, то в I.
4. Фон окна неудачно смотрится, особенно с учетом белого квадрата вокруг зеленой кнопки на черном фоне Лучше нейтральный фон.
5. "Меню" можно упразднить. Открыть JumpRegFav.ini - непонятный пункт. Его надо переместить в Избранное, над всем избранным, и отделить визуально разделителем. Справка - можно заменить на отдельный пункт "?". Порядок меню тогда такой: Избранное, Regedit, ?

Что касается JumpRegFav.ini, то не очень понятно, для чего нужно имя после разделителя. Видимо, это работает только при добавлении в избранное реестра, что неочевидно.

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 11:47, 24-12-2010 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Утилита для перехода в заданный раздел реестра

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - [решено] Почему параметры реестра импортируются в раздел 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




 
Переход