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

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

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

(*.*)


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


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

Профиль | Сайт | Отправить 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

Старожил


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

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


Morpheus, сделал, несложно, времени не было и настроя. Если что, строка 124 указан путь основной и в строке 366 пеерключение. Можно указать другие пути, сейчас RegScanner и RegScanner_x86.
читать дальше »
Код: Выделить весь код
#AutoIt3Wrapper_Outfile=JumpReg.exe
#AutoIt3Wrapper_Icon=JumpReg.ico
#AutoIt3Wrapper_Compression=4
; #AutoIt3Wrapper_UseX64=y
#AutoIt3Wrapper_UseAnsi=y
#AutoIt3Wrapper_Res_Comment=
#AutoIt3Wrapper_Res_Description=JumpReg.exe
#AutoIt3Wrapper_Res_Fileversion=0.7.0.0
#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=n
#AutoIt3Wrapper_Res_LegalCopyright=AZJIO
#AutoIt3Wrapper_Res_Language=1049
#AutoIt3Wrapper_Run_Au3check=n

;  @AZJIO 23.01.2011 (AutoIt3_v3.3.6.1)
#RequireAdmin
#NoTrayIcon
; FileInstall('RegScanner.exe', '*')
; FileInstall('RegScanner_lng.ini', '*') ;???
; FileInstall('RegScanner.chm', '*')

; En
$LngTitle='JumpReg'
$LngAbout='About'
$LngVer='Version'
$LngSite='Site'
$LngFIT='Define Favorites starting from the next line. After a separator | you can specify a name that has meaning only when importing favorites to Regedit; otherwise, the name is the last subkey.'
$LngFIT1='Folders user'
$LngFIT2='Environment Variables'
$LngFIT3='Environment variables, current'
$LngFav='&Favorites'
$LngEdF='Edit Favorites'
$LngHis='History'
$LngExp='Export	Ctrl+Down'
$LngImp='Import'
$LngSzH='Size'
$LngAdF='Import Favorites to Regedit	Ctrl+Up'
$LngClF='Clear Favorites	Ctrl+Del'
$LngTpE="Jump to the registry key in Regedit." & @CRLF & "Enter"
$LngSWR='Search with RegScanner	Alt+\'
$LngTop='Always on top'
$LngHsIB1='History'
$LngHsIB2='The number of records in the history:'
$LngMs1='Message'
$LngMs2='Clear Favorites in Regedit?'
$LngMs3='Add JumpRegFav.ini entries'&@CRLF&'to Regedit Favorites?'
$LngMs4='Exported successfully to JumpRegSet.reg'&@CRLF&'in the program folder.'
$LngMs5='Error'
$LngMs6='JumpRegSet.reg file not found.'&@CRLF&'You can create it with the Export command.'
$LngMs7='Error: invalid name for the root registry key'
$LngMs8='The key does not exist. The nearest key is:'
$LngMs9='Do you want to jump to it?'
$LngSLng='Language'
$LngNRE='Regedit in a new window	Ctrl+Enter'
$LngUtl='RegScanner x86'

$Lang_dll = DllOpen("kernel32.dll")
$UserIntLang=DllCall ( $Lang_dll, "int", "GetUserDefaultUILanguage" )
If Not @error Then $UserIntLang=Hex($UserIntLang[0],4)
DllClose($Lang_dll)

; Ru
; если русская локализация, то русский язык
If $UserIntLang = 0419 Then
	$LngTitle='Прыжок в указанный раздел реестра'
	$LngAbout='О программе'
	$LngVer='Версия'
	$LngSite='Сайт'
	$LngFIT='Указывайте Избранное, начиная с третьей строки. После разделителя | можно указать имя (имеет значение только при импорте избранного в Regedit), иначе именем становится последний подраздел.'
	$LngFIT1='Папки пользователя'
	$LngFIT2='Переменные среды'
	$LngFIT3='Переменные среды текущего'
	$LngFav='&Избранное'
	$LngEdF='Редактировать избранное'
	$LngHis='И&стория'
	$LngExp='Экспорт	Ctrl+Down'
	$LngImp='Импорт'
	$LngSzH='Размер'
	$LngAdF='Добавить в Избранное	Ctrl+Up'
	$LngClF='Очистить Избранное	Ctrl+Del'
	$LngTpE="Перейти в regedit" & @CRLF & "в указанный раздел реестра." & @CRLF & "Enter"
	$LngSWR='Поиск в RegScanner	Alt+\'
	$LngTop='Поверх всех окон'
	$LngHsIB1='История'
	$LngHsIB2='Количество записей в истории:'
	$LngMs1='Сообщение'
	$LngMs2='Очистить Избранное в Regedit?'
	$LngMs3='Добавить разделы из JumpRegFav.ini' & @CRLF & 'в Избранное Regedit?'
	$LngMs4='Экспорт выполнен в файл JumpRegSet.reg'&@CRLF&'в папку программы.'
	$LngMs5='Ошибка'
	$LngMs6='Файл JumpRegSet.reg не найден.'&@CRLF&'Его можно создать командой Экспорт.'
	$LngMs7='Ошибка имени корневого раздела'
	$LngMs8='Раздела не существует.'&@CRLF&'Ближайший доступный раздел:'
	$LngMs9='Перейти в него?'
	$LngSLng='Язык интерфейса'
	$LngNRE='Regedit в новом окне	Ctrl+Enter'
	$LngUtl='RegScanner x86'
EndIf

Switch @OSArch
    Case 'X64'
        $HKCU='HKCU64'
        $HKCR='HKCR64'
    Case Else;'X86'
        $HKCU='HKCU'
        $HKCR='HKCR'
EndSwitch

$LangPath=RegRead($HKCU&'\Software\JumpRegAzjio', 'Lang')
If Not @error Then
	If FileExists(@ScriptDir&'\Lang\'&$LangPath) Then
		$aLng = IniReadSection(@ScriptDir&'\Lang\'&$LangPath, 'lng')
		If Not @error Then
			For $i = 1 To $aLng[0][0]
				If StringInStr($aLng[$i][1], '\r\n') Then $aLng[$i][1]=StringReplace($aLng[$i][1],'\r\n',@CRLF)
				If IsDeclared('Lng'&$aLng[$i][0]) Then Assign('Lng'&$aLng[$i][0],$aLng[$i][1])
			Next
		EndIf
	Else
		RegDelete($HKCU&'\Software\JumpRegAzjio', 'Lang')
	EndIf
EndIf


Global $aRecords, $kol_item, $list='', $aPos, $TrTop=0, $TrNRE=0, $RegScanner = 'RegScanner\RegScanner.exe'
Global $Ini = @ScriptDir & '\JumpRegFav.ini'
$FileTmp=''

$kol_item=RegRead($HKCU&'\Software\JumpRegAzjio', 'HistorySize')
If @error Or StringIsDigit($kol_item)=0 Or $kol_item = '' Or $kol_item>50 Then $kol_item=26 ; количество пунктов в комбобоксе
$Xsz=90
$Xsz2=84
$Jx=5
$Js=23
Switch @OSVersion
    Case 'WIN_VISTA', 'WIN_7'
        $Xsz=91
		$Xsz2=77
		$Jx=4
		$Js=24
EndSwitch
GUIRegisterMsg(0x0024, "WM_GETMINMAXINFO")

If Not FileExists($Ini) And DriveStatus(StringLeft(@ScriptDir, 1))<>'NOTREADY' Then
$file = FileOpen($Ini,2)
FileWrite($file, '[Favorites]' & @CRLF & _
'; '&$LngFIT & @CRLF & _
'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders|'&$LngFIT1 & @CRLF & _
'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders|'&$LngFIT1&' 2' & @CRLF & _
'HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment|'&$LngFIT2 & @CRLF & _
'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run|Run (all)' & @CRLF & _
'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run' & @CRLF & _
'HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt' & @CRLF & _
'HKEY_CURRENT_USER\Environment|'&$LngFIT3 & @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' & @CRLF & _
'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts')
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

$Pos=RegRead($HKCU&'\Software\JumpRegAzjio', 'Pos')
If @error Or Not StringInStr($Pos, '|') Then $Pos='-1|-1'
$aPos=StringSplit($Pos, '|')
If $aPos[1] > @DesktopWidth-548 Or $aPos[2]>@DesktopHeight-$Xsz2 Then
	$aPos[1]=-1
	$aPos[2]=-1
EndIf

$GUI=GUICreate($LngTitle, 548, $Xsz2, $aPos[1], $aPos[2], 0x00040000+0x00020000+0x00010000)
If Not @compiled Then GUISetIcon('JumpReg.ico')

$FavM=GUICtrlCreateMenu($LngFav)
$runfav=GUICtrlCreateMenuitem($LngEdF, $FavM)
GUICtrlCreateMenuitem('', $FavM)

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')

$HisM=GUICtrlCreateMenu($LngHis)
$Export=GUICtrlCreateMenuitem($LngExp, $HisM)
$Import=GUICtrlCreateMenuitem($LngImp, $HisM)
$HisSz=GUICtrlCreateMenuitem($LngSzH, $HisM)

$RegM=GUICtrlCreateMenu('&Regedit')
$favorites=GUICtrlCreateMenuitem($LngAdF, $RegM)
$Clean=GUICtrlCreateMenuitem($LngClF, $RegM)
GUICtrlCreateMenuitem('', $RegM)
$SearchWRS=GUICtrlCreateMenuitem($LngSWR, $RegM)
$NewREt=GUICtrlCreateMenuitem($LngNRE, $RegM)

$ActM=GUICtrlCreateMenu('?')
$About=GUICtrlCreateMenuitem($LngAbout, $ActM)
$Topmost =GUICtrlCreateMenuitem($LngTop, $ActM)
$SelLng =GUICtrlCreateMenuitem($LngSLng, $ActM)
$UtlM =GUICtrlCreateMenuitem($LngUtl, $ActM)

$Jump = GUICtrlCreateButton("E", 517, $Jx, $Js, $Js, 0x0040)
GUICtrlSetTip(-1, $LngTpE)
GUICtrlSetResizing(-1, 512 + 256 +32+ 4)
GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', -138, 0)

$comboreg = GUICtrlCreateCombo("", 6, 5, 509)
GUICtrlSetResizing(-1, 2 + 4 +32)
If $list<>'' Then GUICtrlSetData(-1, '|'&$list, '')
_HisSz()

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

Dim $AccelKeys[6][2] = [ _
["{Enter}", $Jump], _
["^{Enter}", $NewREt], _
["^{UP}", $favorites], _
["^{DEL}", $Clean], _
["!{\}", $SearchWRS], _
["^{DOWN}", $Export]]
GUISetAccelerators($AccelKeys)

GUICtrlSetState($comboreg, 256)
GUISetState()
GUISetState(@SW_RESTORE)
Sleep(200)
WinSetOnTop($GUI, '', 1)
WinSetOnTop($GUI, '', 0)

$TrTop=RegRead('HKCU\Software\JumpRegAzjio', 'Topmost')
If Not @error And $TrTop=1 Then
	WinSetOnTop($GUI, '', 1)
	GUICtrlSetState($Topmost, 1)
EndIf

While 1
	$msg = GUIGetMsg()
	For $i = 1 To $aList2[0][0]
		If $msg = $aList2[$i][0] Then
			_Jump($aList2[$i][1])
		EndIf
	Next
	
	Select
		Case $msg = $SelLng
			$OpenFile = FileOpenDialog('Open', @ScriptDir&'\Lang' , "Language (*.ini)", 3, "", $Gui)
			If @error Then ContinueLoop
			RegWrite($HKCU&'\Software\JumpRegAzjio','Lang','REG_SZ', StringRegExpReplace($OpenFile,'(^.*)\\(.*)$','\2'))
			_restart()
			
		Case $msg = $SearchWRS
			Run($RegScanner)
	
		Case $msg = $HisSz
			$tmp = InputBox($LngHsIB1, $LngHsIB2, $kol_item, '', 200, 135)
			If Not StringIsDigit($tmp) Then ContinueLoop
			$kol_item=Execute($tmp)
			If $kol_item>50 Then $kol_item=50
			RegWrite($HKCU&'\Software\JumpRegAzjio','HistorySize','REG_SZ', $kol_item)
			_HisSz()
	
		Case $msg = $Clean
			If MsgBox(4, $LngMs1, $LngMs2)=7 Then ContinueLoop
			RegDelete($HKCU&'\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\Favorites')
			GUICtrlSetState($comboreg, 256)

		Case $msg = $favorites
			If MsgBox(4, $LngMs1, $LngMs3)=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") Then
				ContinueLoop
			Else
				Run('regedit.exe')
			EndIf
			GUICtrlSetState($comboreg, 256)
			
		Case $msg = $NewREt
			$TrNRE=1
			ContinueCase 

		Case $msg = $Jump Or $msg = $comboreg
			$comboreg0 = GUICtrlRead($comboreg)
			$runyes=_Jump($comboreg0)
			If $runyes Then ContinueLoop

			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-1 Then $list=StringRegExpReplace($list, '(^.*)\|.*$', '\1')
			GUICtrlSetData($comboreg, $list, $comboreg0)
			GUICtrlSetState($comboreg, 256)
			RegWrite($HKCU&'\Software\JumpRegAzjio','History','REG_SZ',$list)

		Case $msg = $Export
			_Pos()
			If FileExists(@ScriptDir & '\JumpRegSet.reg') Then FileDelete(@ScriptDir & '\JumpRegSet.reg')
			RunWait(@SystemDir&'\reg.exe export HKCU\Software\JumpRegAzjio "'&@ScriptDir & '\JumpRegSet.reg"', '', @SW_HIDE )
			MsgBox(0, $LngMs1, $LngMs4)

		Case $msg = $Import
			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'))
				_HisSz()
			Else
				MsgBox(0, $LngMs5, $LngMs6)
			EndIf
			
       Case $msg = $Topmost
			$TrTop=RegRead($HKCU&'\Software\JumpRegAzjio', 'Topmost')
			If @error Then $TrTop=0
			If $TrTop = 0 Then
				WinSetOnTop($GUI, '', 1)
				RegWrite($HKCU&'\Software\JumpRegAzjio','Topmost','REG_SZ', '1')
				GUICtrlSetState($Topmost, 1)
			Else
				WinSetOnTop($GUI, '', 0)
				RegWrite($HKCU&'\Software\JumpRegAzjio','Topmost','REG_SZ', '0')
				GUICtrlSetState($Topmost, 4)
			EndIf
			
       Case $msg = $UtlM
			If $RegScanner = 'RegScanner\RegScanner.exe' Then
				$RegScanner = 'RegScanner_x86\RegScanner.exe'
				GUICtrlSetState($UtlM, 1)
			Else
				$RegScanner = 'RegScanner\RegScanner.exe'
				GUICtrlSetState($UtlM, 4)
			EndIf
			
       Case $msg = $About
           _About()
		
		Case $msg = $runfav
			Run($Editor&' '&@ScriptDir & '\JumpRegFav.ini')
			; Run(@SystemDir&'\notepad.exe '&@ScriptDir & '\JumpRegFav.ini')
		Case $msg = -3
			_Pos()
			Exit
	EndSelect
WEnd

Func _Pos()
	$GuiPos = WinGetPos($Gui)
	If $GuiPos[0] < 0 Or $GuiPos[1]< 0 Then
		$GuiPos[0]=$aPos[1]
		$GuiPos[1]=$aPos[2]
	EndIf
	RegWrite($HKCU&'\Software\JumpRegAzjio','Pos','REG_SZ',$GuiPos[0]&'|'&$GuiPos[1])
EndFunc

Func _Jump(ByRef $comboreg0)
	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, $LngMs5, $LngMs7)
				Return 1
			EndIf
		WEnd
		If MsgBox(4, $LngMs5, $LngMs8&@CRLF&$comboreg0 &@CRLF&@CRLF&$LngMs9)=7 Then Return 1
	EndIf
	
	If $TrNRE=1 Then
		$TrNRE=0
		Run('regedit -m')
		WinWaitActive('[CLASS:RegEdit_RegEdit]')
	EndIf
	Run($RegScanner&' /regedit "'&$comboreg0&'"', "", @SW_HIDE)
EndFunc

Func _HisSz()
	StringReplace($list, '|', '|')
	If @extended>$kol_item-1 Then
		$tmp=StringInStr($list, '|', 0, $kol_item)
		$list=StringMid($list, 1, $tmp-1)
		GUICtrlSendMsg($comboreg, 0x14B, 0, 0)
		GUICtrlSetData($comboreg, $list, StringRegExpReplace($list, '(.*?)\|.*', '\1'))
		RegWrite($HKCU&'\Software\JumpRegAzjio','History','REG_SZ',$list)
	EndIf
	GUICtrlSetState($comboreg, 256)
EndFunc

;  MerkurAlex (mod AZJIO)
; http://www.autoitscript.com/forum/topic/70203-regexists/page__view__findpost__p__514688
Func _Reg_Exists($key)
    Local $Err=RunWait('reg query "'&$key&'"','',@SW_HIDE)
    If $Err=0 Then
        Return 1
    Else
        Return 0
    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", 300)
		DllStructSetData($tMINMAXINFO, "MinTrackSizeY", $Xsz)
		DllStructSetData($tMINMAXINFO, "MaxSizeX", 800)
		DllStructSetData($tMINMAXINFO, "MaxSizeY", $Xsz)
		DllStructSetData($tMINMAXINFO, "MaxPositionX", @DesktopWidth/2-400)
		DllStructSetData($tMINMAXINFO, "MaxPositionY", 0)
	EndIf
EndFunc

Func _EXE_Path($type)
	Local $typefile = RegRead($HKCR &'\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.'&$type, 'Progid')
	If @error Or  $typefile='' Then
		$typefile = RegRead('HKCR\.'&$type, '')
		If @error Then Return SetError(1)
	EndIf
	$typefile = RegRead($HKCR & '\' & $typefile & '\shell\open\command', '')
	If @error Then Return SetError(1)
	Local $aPath=StringRegExp($typefile, '(?i)(^.*)(\.exe.*)$', 3)
	If @error Then Return SetError(1)
	$aPath = StringReplace($aPath[0], '"', '') & '.exe'
	Opt('ExpandEnvStrings', 1)
	If FileExists($aPath) Then
		$aPath=$aPath
		Opt('ExpandEnvStrings', 0)
		Return $aPath
	EndIf
	Opt('ExpandEnvStrings', 0)
	If FileExists(@SystemDir&'\'&$aPath) Then Return @SystemDir&'\'&$aPath
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


Func _About()
Local $GuiPos, $y, $Gui1, $font, $url1, $url2
$GuiPos = WinGetPos($Gui)
GUISetState(@SW_DISABLE, $Gui)
$y=$GuiPos[1]+$GuiPos[3]/2-90
If $y < 0 Then $y= 0
$font="Arial"
    $Gui1 = GUICreate($LngAbout, 270, 180,$GuiPos[0]+$GuiPos[2]/2-135, $y, -1, 0x00000080,$Gui)
	GUISetBkColor (0xffca48)
	GUICtrlCreateLabel('JumpReg', 0, 0, 270, 63, 0x01+0x0200)
	GUICtrlSetFont (-1,15, 600, -1, $font)
	GUICtrlSetColor(-1,0xa13d00)
	GUICtrlSetBkColor (-1, 0xfbe13f)
	GUICtrlCreateLabel ("-", 2,64,268,1,0x10)
	
	GUISetFont (9, 600, -1, $font)
	GUICtrlCreateLabel($LngVer&' 0.7  23.01.2011', 55, 100, 210, 17)
	GUICtrlCreateLabel($LngSite&':', 55, 115, 40, 17)
	$url1=GUICtrlCreateLabel('azjio.ucoz.ru', 55, 115, 150, 15, 0x1)
	GUICtrlSetCursor(-1, 0)
	GUICtrlSetColor(-1, 0x0000ff)
	$url2=GUICtrlCreateLabel('oszone.net', 55, 130, 150, 15, 0x1)
	GUICtrlSetCursor(-1, 0)
	GUICtrlSetColor(-1, 0x0000ff)
	GUICtrlCreateLabel('Copyright AZJIO © 2009-2011', 55, 145, 210, 17)
	GUISetState(@SW_SHOW, $Gui1)
$msg = $Gui1
	While 1
	  $msg = GUIGetMsg()
	  Select
		Case $msg = $url1
			ShellExecute ('http://azjio.ucoz.ru')
		Case $msg = $url2
			ShellExecute ('http://forum.oszone.net')
		Case $msg = -3
			$msg = $Gui
			GUISetState(@SW_ENABLE, $Gui)
			GUIDelete($Gui1)
			ExitLoop
		EndSelect
    WEnd
EndFunc
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:30, 13-02-2011 | #131



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

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


Аватара для Morpheus

Ветеран


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

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


murder, спасибо, но не пойдёт. В 64-битке запускает 32-битный regedit.
AZJIO, спасибо! Всё супер!

Отправлено: 23:30, 14-02-2011 | #132


(*.*)


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

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


AZJIO, я только сейчас обратил внимание, что 64-разрядная версия утилиты запускает 32-разрядный редактор реестра (Windows 7 x64). Я думаю, что это неправильно. Потому что если запускать regedit обычным путем, система вызывает 64-разрядный редактор.

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


Отправлено: 11:42, 20-05-2012 | #133


Аватара для AZJIO

Старожил


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

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


Vadikan, Разве не от RegScanner зависит?
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:08, 20-05-2012 | #134


(*.*)


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

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


AZJIO, да, все верно, видно у меня со сборкой напутано что-то... Перекачал.

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


Отправлено: 01:09, 21-05-2012 | #135


Аватара для AZJIO

Старожил


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

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


Vadikan, можно сделать без RegScanner, вот пример
Код: Выделить весь код
; Запуск редактора реестра
Run("regedit.exe")

; Ожидание 5 секунд до появление окна редактора реестра
$hWnd = WinWait("[CLASS:RegEdit_RegEdit]", "", 5)
If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
EndIf

; Получает дескриптор TreeView
$hControl = ControlGetHandle($hWnd, "", "[CLASS:SysTreeView32; INSTANCE:1]")

_Jump($hWnd, $hControl, 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run')
Sleep(1000)
_Jump($hWnd, $hControl, 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')

Func _Jump($hWnd, $hControl, $sKey)
    $aKey = StringSplit($sKey, '\')
    $sKey='#0'
    For $i = 1 To $aKey[0]
        ControlTreeView ($hWnd, "", $hControl, "Expand", $sKey)
        $sKey &= '|'&$aKey[$i]
    Next
    ControlTreeView ($hWnd, "", $hControl ,  "Select", $sKey)   
EndFunc
И окно не закрывается, используется дескриптор открытого окна.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:48, 21-05-2012 | #136


(*.*)


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

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


AZJIO, спасибо! Мы вроде проходили такой вариант, но отказались от него https://www.outsidethebox.ms/11147/#whyregscanner

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


Отправлено: 14:44, 21-05-2012 | #137


Аватара для AZJIO

Старожил


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

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


Vadikan, Так это же не такой вариант. Перезапуска нет, это видно из скрипта. Выполняется функция _Jump, далее через секунду выполняется ещё раз. Это для примера, что перезапуска нет. Функция "ControlTreeView" позволяет сделать выбор в текущем дереве, но при условии что дерево развёрнуто. Поэтому параметр "Expand" разворачивает дерево в цикле, углубляясь до последнего, а параметр "Select" делает выбор.
В принципе плюс только в неиспользовании сторонних утилит. Но при условии что у RegScanner ещё и удобный поиск, то можно оставить как есть.

Отправлено: 16:55, 21-05-2012 | #138


Аватара для AZJIO

Старожил


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

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


Vadikan, JumpReg обновил до версии 0.8
Исходник с выбором сторонних утилит стал основным, так как переход к разделу без сторонних утилит не требует перезапуска regedit.
Выпадающий список теперь имеет размер не менее 600
В меню пункт "Добавить в избранное" (добавляет и в меню и в файл)
Все диалоговые окна теперь дочерние

И другие незначительные исправления:
При наличии RegScanner автоматически используется он. При его удалении автоматически включается "без сторонних утилит"
При запуске второго окна RegEdit убрал ошибку: если поле пустое, то не пытается автоматически перейти в раздел.
Пункт меню: "Поиск с помошью RegScanner" не появляется если его нет.
Функцию _SetCoor обновил (диалог не окажется за экраном).

На Win7 не тестил, но сменил стиль, который потребовал на 30 уменьшить высоту окна. А также стиль $WS_CLIPCHILDREN для уменшения мерцания.

В планах можно ещё добавить сохранение ширины окна.

Последний раз редактировалось AZJIO, 28-05-2012 в 09:26.

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

Отправлено: 03:32, 25-05-2012 | #139


Аватара для Morpheus

Ветеран


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

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


AZJIO, спасибо, всё отлично!
Цитата AZJIO:
На Win7 не тестил, но сменил стиль, который потребовал на 30 уменьшить высоту окна. »
При запуске - обрезок, если окно переместить, нормальный размер возвращается.

Цитата AZJIO:
А также стиль $WS_CLIPCHILDREN для уменшения мерцания. »
Супер!
Цитата AZJIO:
При наличии RegScanner автоматически используется он. При его удалении автоматически включается "без сторонних утилит" »
А при возвращении RegScanner автоматически возвращаться его использование не должно?
Хотя я RegScanner уже выпилил и мне собстно пофиг Просто показалось, что это было бы логично.

Последний раз редактировалось Morpheus, 25-05-2012 в 10:41.


Отправлено: 10:35, 25-05-2012 | #140



Компьютерный форум 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




 
Переход