Title= Registry File Editor v0.3 ;;; bLisTeRinG 2006 #SingleInstance Off regFile=%1% SplitPath, regFile, regFName RegRead, app1, HKLM, Software\bLisTeRinG\RegFileEd, HelperApp1 If app1= app1=%A_ScriptDir%\RegShortcut.exe RegRead, regMT, HKLM, Software\bLisTeRinG\RegFileEd, EmptyKeys If regMT= regMT=0 RegRead, chkConf, HKLM, Software\bLisTeRinG\RegFileEd, Confirm If chkConf= chkConf=1 RegRead, regCol, HKLM, Software\bLisTeRinG\RegFileEd, Colour If regCol= regCol=green RegRead, regWPos, HKLM, Software\bLisTeRinG\RegFileEd, WinPosition If regWPos= regWPos=x60 y180 w600 h200 Loop, Parse, regWPos, %A_Space% { y = %A_LoopField% StringTrimLeft, y, y, 1 If A_Index < 3 { y += 20 x%A_Index% = %y% } Else { x%A_Index% = %y% } } regXpos=x%x1% y%x2% w%x3% h%x4% ;msgbox, 4096,,regXpos:%regXpos%`n%x1%`n%x2%`n%x3%`n%x4% RegWrite, REG_SZ, HKLM, Software\bLisTeRinG\RegFileEd, WinPosition, %regXpos% ;Yes yes add some resolution checking with A_ScreenWidth A_ScreenHeightregXpos= ;; SysGet Mon, MonitorWorkArea ;; MsgBox %MonLeft% - %MonTop% - %MonRight% - %MonBottom%x= y= x1= x2= x3= x4= regExp=Double-Click to copy the value here for editing. regRow=1 regPic=%A_ScriptDir%\Tweax2.ico Gui, +Resize +OwnDialogs Gui, Color, %regCol% Gui, Add, Edit, y7 -ReadOnly vregTxt, %regExp% Gui, Add, Button, y7 gregText, Done Gui, Add, Button, y7 gregSfile, Save to File Gui, Add, Button, y7 x+30 gregSreg, Save to Registry Gui, Add, Button, x+-189 y32 gregZfile, Delete from File Gui, Add, Button, x+14 y32 gregZreg, Delete from Registry Gui, Add, Button, x12 y+-2 gregNew, Add New Key Gui, Add, Checkbox, xm y36 -Checked%regMT% gregMT vregMT, Show Empty/Default keys? (and Refresh) Gui, Add, Checkbox, x230 y36 -Checked%chkConf% gchkConf vchkConf, Confirm? Gui, Add, ListView, x10 y80 r4 w40 h10 vdeClick gdeClick, Root|Sub|Key|FileValue|RegistryValue Gui, Add, Picture, x500 y0 gregHelp vregHelp w80 h-1 0x4000000, %regPic% Gui, Add, Button, Hidden Default, Default gui, 2:+owner1 Gui, 2:Add, DropDownList, y7 r4 w150 -ReadOnly vregN1a, HKEY_CLASSES_ROOT||HKEY_CURRENT_USER|HKEY_LOCAL_MACHINE|HKEY_USERS| Gui, 2:Add, Edit, y7 w150 -ReadOnly vregN2a, ...Path`\to`\Key Gui, 2:Add, Edit, y7 w100 -ReadOnly vregN3a, Key Gui, 2:Add, Edit, y7 w100 -ReadOnly vregN4a, Value Gui, 2:Add, Button, y7 gregN, Add GuiControl, Focus, deClick Gosub Top Return Top: Loop, Read, %regFile% { ;; Check for start of key. IfInString, A_LoopReadLine, [ { IfInString, A_LoopReadLine, = { ;; If this line has equals then its not a key. } else { StringGetPos, regPos, A_LoopReadLine, ], L1 regPos:=(regPos-1) ;; got the end of the key - now slice it up. StringMid, regSect, A_LoopReadLine, 2, %regPos% IfInString, A_LoopReadLine, \ { StringGetPos, regPL, regSect, \, L1 StringMid, regRoot, regSect, 1, %regPL% StringGetPos, regPR, regSect, \, R1 If %regPL% = %regPR% { regPL:=(regPL+2) StringMid, regSub, regSect, %regPL%, %regPos% } Else { regPR:=(regPR-2) regPL:=(regPL+2) StringMid, regSub, regSect, %regPL%, %regPR% } } } If regMT = 1 { RegRead, regReg, %regRoot%, %regSub% If regReg= { regReg= } LV_Add("", regRoot,regSub,"","",regReg) } } IfInString, A_LoopReadLine, = { StringSplit, regVal, A_LoopReadLine, = If regVal1 = @ { RegRead, regReg, %regRoot%, %regSub% } Else { qOff=%regVal1% Gosub QuoteOff regVal1=%qOff% RegRead, regReg, %regRoot%, %regSub%, %regVal1% } If regReg= regReg= If regVal2= { regVal2= } Else { qOff=%regVal2% Gosub QuoteOff regVal2=%qOff% } LV_Add("",regRoot,regSub,regVal1,regVal2,regReg) regReg= regVal2= regVal1= regVal= } regPL= regPR= regReg= } LV_ModifyCol() LV_ModifyCol(2, Right) Gui, Show, %regWPos%,%regFName% >>> %Title% LV_Modify(regRow, "Select") LV_Modify(regRow, "Focus") Return chkConf: If chkConf = 1 { chkConf=0 GuiControl,, chkConf, 0 } Else { chkConf=1 GuiControl,, chkConf, 1 } RegWrite, REG_SZ, HKLM, Software\bLisTeRinG\RegFileEd, Confirm, %chkConf% Return QuoteOff: StringGetPos, quoL, qOff,`", L If quoL=0 { StringGetPos, quoR, qOff,`", R { StringLen, sLen, qOff sLen-=1 If quoR=%sLen% { StringTrimRight, qOff, qOff, 1 StringTrimLeft, qOff, qOff, 1 } } } Return GuiClose: GuiEscape: WinGetPos, regW1, regW2, regW3, regW4, A regW3 -= 12 regW4 -= 32 regWpos=x%regW1% y%regW2% w%regW3% h%regW4% RegWrite, REG_SZ, HKLM, Software\bLisTeRinG\RegFileEd, WinPosition, %regWPos% ExitApp GuiSize: If A_EventInfo = 1 Return GuiControl, Move, deClick, % "W" . (A_GuiWidth - 20) . " H" . (A_GuiHeight - 90) Return regHelp: Gui, Show, +Hide MsgBox, 4096, Help, %Title%`nbLisTeRinG`n`nUse RegFileEditor to:`n 1) Edit values`n 2) Merge to Windows Registry`n 3) Save to .reg file`n 4) Delete a line from the .reg file`n`nOpen the Registry at a Key with double-right-click. Gui, Restore Return regMT: If regMT = 0 { regMT=1 GuiControl,, regMT, 1 } Else { regMT=0 GuiControl,, regMT, 0 } LV_Delete() RegWrite, REG_SZ, HKLM, Software\bLisTeRinG\RegFileEd, EmptyKeys, %regMT% GoSub Top Return ButtonDone: regText: regRow := LV_GetNext(0, "F") If not regRow Return GuiControlGet, regRw4,, regTxt ;MsgBox, 4096, RegFileEd Row data, 1:%regRw1%`n2:%regRw2%`n3:%regRw3%`n4:%regRw4%`nold:%regExp% LV_Modify(regRow, "Col4", regRw4) GuiControl, Focus, deClick Return ButtonDefault: deClick: ;MsgBox, 4096, RegFileEd Buttons, ButtonDefault`nA_GuiEvent:%A_GuiEvent%`nA_EventInfo:%A_EventInfo% regRow := LV_GetNext(0, "F") If not regRow Return If A_GuiEvent = Normal { If A_EventInfo { Goto ButtonDone } } If A_GuiEvent = R { LV_GetText(de1, A_EventInfo,1) LV_GetText(de2, A_EventInfo,2) Run, %app1% %de1%\%de2%\ Return } LV_GetText(regExp, regRow, 4) GuiControl,, regTxt, %regExp% GuiControl, Focus, regTxt ;GuiControl, Select, regTxt Return regNew: Gui, 2:Show,, New Registry Key. Return regN: Gui, 2:hide Gui, 1:default GuiControlGet, regN1,2:, regN1a GuiControlGet, regN2,2:, regN2a GuiControlGet, regN3,2:, regN3a GuiControlGet, regN4,2:, regN4a ;MsgBox, 4100, Test, Ok?`n`n %regN1%`\%regN2% %regN3%`=%regN4% LV_Add("",regN1,regN2,regN3,regN4) ;LV_Delete() ;GoSub Top Tooltip, Return regZfile: Gosub regLine Gosub regFileLine If chkConf = 1 MsgBox, 4100, Delete a regFile key., Delete the regFile Key?:`n`n%reg1%`n`\%reg2%`n`n%reg3%=%reg4% IfMsgBox, No Return Tooltip, Deleting %reg3% from %reg1%`\%reg2% IniDelete, %regFile%, %reg1%`\%reg2%, %reg3% LV_Delete() GoSub Top Tooltip, Return regZreg: Gosub regLine If chkConf = 1 MsgBox, 4100, Delete a registry key., Delete the Registry Key?:`n`n%reg1%`n`\%reg2%`n`n%reg3%=%reg4% IfMsgBox, No Return Tooltip, Deleting %reg3% from %reg1%`\%reg2% If reg3 = @ { reg3=AHK_DEFAULT } RegDelete, %reg1%, %reg2%, %reg3% LV_Delete() GoSub Top Tooltip, Return regSfile: Gosub regLine Gosub regFileLine If chkConf = 1 MsgBox, 4100, Update a regFile value., Apply to %regFile%?:`n`n%reg1%`\%reg2%`n%reg3%=%reg4% IfMsgBox, No Return Tooltip, Saving %regFile% ... %reg3%=%reg4% IniWrite, %reg4%, %regFile%, %reg1%`\%reg2%, %reg3% LV_Delete() GoSub Top Tooltip, Return regSreg: Gosub regLine StringReplace, reg4, reg4,`\`\,`\,all StringReplace, reg4, reg4,`\`",`",all ;MsgBox, 4100, Test, Cleaned up?`n`n %reg4% IfMsgBox, No Return If chkConf = 1 MsgBox, 4100, Update a Registry Value., Apply to the Registry?:`n`n%reg1%`\%reg2%`n%reg3%=%reg4% IfMsgBox, No Return If reg3 = @ { reg3= } Tooltip, Saving to Registry ... %reg3%=%reg4% RegWrite, REG_SZ, %reg1%, %reg2%, %reg3%, %reg4% LV_Delete() GoSub Top Tooltip, Return regLine: regRow := LV_GetNext(0, "F") If not regRow Return LV_GetText(reg1, regRow, 1) LV_GetText(reg2, regRow, 2) LV_GetText(reg3, regRow, 3) LV_GetText(reg4, regRow, 4) Return regFileLine: If reg3 = @ { Goto regSfile1 } reg3=`"%reg3%`" regSfile1: If reg4 = { Goto regSfile2 } reg4=`"%reg4%`" regSfile2: Return