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

Показать сообщение отдельно

Аватара для AZJIO

Старожил


Сообщения: 265
Благодарности: 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