(*.*)
Сообщения: 36570
Благодарности: 6700
|
Профиль
|
Сайт
|
Отправить PM
| Цитировать
AZJIO, спасибо!
Прилепление к регедиту не работает, но оно далеко не всем понадобится.
Я поправил все сообщения в интерфейсе, чтобы они понятнее были (и короче). Код не трогал, разве что размер окна Истории. И убрал C:\ из путей к файлам regscanner, пусть они лежат в папке с программой
Morpheus, потестит х64
Код
читать дальше »
Код: 
#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.4.0.0
#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=n
#AutoIt3Wrapper_Res_LegalCopyright=AZJIO
#AutoIt3Wrapper_Res_Language=1049
#AutoIt3Wrapper_Run_Au3check=n
; @AZJIO 25.12.2010 (AutoIt3_v3.2.12.1+)
#RequireAdmin
#NoTrayIcon
FileInstall('RegScanner.exe', '*')
FileInstall('RegScanner_lng.ini', '*')
Opt("GUIResizeMode", 0x0322)
GUIRegisterMsg(0x0024, "WM_GETMINMAXINFO")
Global $aRecords, $kol_item, $list='', $GP=-11, $GPtmp=12
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
Switch @OSVersion
Case 'WIN_VISTA', 'WIN_7'
$Xsz=98
EndSwitch
; HotKeySet("!{ESC}", "_restart") ; для теста утилиты
If Not FileExists($Ini) And DriveStatus(StringLeft(@ScriptDir, 1))<>'NOTREADY' Then
$file = FileOpen($Ini,2)
FileWrite($file, '[Favorites]' & @CRLF & _
'; Указывайте Избранное, начиная со следующей строки. После разделителя | можно указать имя (имеет значение только при импорте избранного в Regedit), иначе именем становится последний подраздел.' & @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, 84, -1, -1, 0x00040000+0x00020000+0x00010000)
$FavM=GUICtrlCreateMenu('&Избранное')
$runfav=GUICtrlCreateMenuitem('Открыть JumpRegFav.ini', $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('И&стория')
$Save=GUICtrlCreateMenuitem('Экспорт', $HisM)
$ReHis=GUICtrlCreateMenuitem('Импорт', $HisM)
$HisSz=GUICtrlCreateMenuitem('Размер', $HisM)
$RegM=GUICtrlCreateMenu('&Regedit')
$favorites=GUICtrlCreateMenuitem('Добавить в Избранное', $RegM)
$Clean=GUICtrlCreateMenuitem('Очистить Избранное', $RegM)
$ActM=GUICtrlCreateMenu('?')
$About=GUICtrlCreateMenuitem('О программе', $ActM)
$Jump = GUICtrlCreateButton("П", 517, 5, 23, 23, 0x0040)
GUICtrlSetTip(-1, "Перейти в regedit" & @CRLF & "в указанный раздел реестра." & @CRLF & "Enter")
GUICtrlSetResizing(-1, 512 + 256 +32+ 4)
GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', -138, 0)
$comboreg = GUICtrlCreateCombo("", 7, 5, 508)
GUICtrlSetResizing(-1, 2 + 4 +32)
If $list<>'' Then GUICtrlSetData(-1, $list, StringRegExpReplace($list, '(.*?)\|.*', '\1'))
_HisSz()
$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($comboreg, 256)
GUISetState()
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 = $HisSz
$tmp = InputBox('История', 'Количество записей в истории:', $kol_item, '', 200, 135)
If Not StringIsDigit($tmp) Or Execute($tmp)>50 Then ContinueLoop
$kol_item=Execute($tmp)
RegWrite('HKCU\Software\JumpRegAzjio','HistorySize','REG_SZ', $kol_item)
_HisSz()
Case $msg = $Clean
If MsgBox(4, "Сообщение", "Очистить Избранное в Regedit?")=7 Then ContinueLoop
RegDelete("HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\Favorites")
GUICtrlSetState($comboreg, 256)
Case $msg = $favorites
If MsgBox(4, "Сообщение", "Добавить разделы из JumpRegFav.ini" & @CRLF & "в Избранное 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") Then
ContinueLoop
Else
Run('regedit.exe')
EndIf
GUICtrlSetState($comboreg, 256)
Case $msg = $Jump Or $msg = $comboreg
$comboreg0 = GUICtrlRead($comboreg)
_Jump($comboreg0)
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 = $Save
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, 'Сообщение', 'Экспорт выполнен в файл JumpRegSet.reg'&@CRLF&'в папку программы.')
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'))
_HisSz()
Else
MsgBox(0, 'Ошибка', 'Файл JumpRegSet.reg не найден.'&@CRLF&'Его можно создать командой Экспорт.')
EndIf
Case $msg = $About
_About()
Case $msg = $runfav
Run($Editor&' '&@ScriptDir & '\JumpRegFav.ini')
; Run(@SystemDir&'\notepad.exe '&@ScriptDir & '\JumpRegFav.ini')
Case $msg = -3
ExitLoop
EndSelect
WEnd
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, 'Ошибка', 'Ошибка имени корневого раздела')
Return
EndIf
WEnd
If MsgBox(4, 'Ошибка', 'Раздела не существует.'&@CRLF&'Ближайший доступный раздел: '& _
@CRLF&$comboreg0 &@CRLF&@CRLF& 'Перейти в него?')=7 Then Return
EndIf
Run('regscanner.exe /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
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", 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('HKCU\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, $LngTitle, $LngAbout, $LngVer, $LngSite, $Gui1, $font, $url1, $url2
$LngTitle='JumpReg'
$LngAbout='О программе'
$LngVer='Версия'
$LngSite='Сайт'
$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($LngTitle, 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.4 25.12.2010', 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 © 2010', 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
|