BrettF Posted October 13, 2008 Posted October 13, 2008 (edited) Going through a lot of old scripts, came across this. It's probably not fully finished but here it is. Converts .Reg Files to AU3. Supports command line (When compiled)- /INFILE- Specifies input .reg file. Leave blank to select a file using FileOpen /OUTFILE- Specifies ouput .au3 file. Leave blank to copy AU3 output to clipboard. /OVERWRITE- Only used when /OUTFILE is used. 0 = No Overwrite, will append to end of file, 1 = Overwrite, will clear file. A 112MB reg file complete in just under 2 minutes. (2GB RAM, Intel Core 2 Duo 1.8GHz, Uncompiled.) expandcollapse popup#include <GUIConstantsEx.au3> Dim $infile = "", $outfile = "", $output = "", $overwrite = False, $offset = 0, $post = "" ;Command line for if compiled If @Compiled And $CmdLineRaw Then $strings = StringSplit($CmdLineRaw, "/") For $i = 1 To $strings[0] $cmd = StringSplit($strings[$i], ' "', 1) If $cmd[0] <> 1 Then $param = StringReplace($cmd[1], '"', "") $param1 = StringReplace($cmd[2], '"', "") Switch $param Case "INFILE" $infile = $param1 Case "OUTFILE" $outfile = $param1 Case "OVERWRITE" If $param1 = 0 Then $overwrite = False If $param1 = 1 Then $overwrite = True EndSwitch EndIf Next EndIf ;If not compiled/no command line, ask user to select files If $infile = "" Then $infile = FileOpenDialog("Open Reg File", "", "Registry Files (*.reg)") If $infile = "" Then MsgBox(0, "", "Needs Input File!") Exit EndIf If $outfile = "" Then $outfile = FileSaveDialog("Save Output", "", "AutoIt V3 Scripts(*.au3)") ;If .au3 not on the end of outfile, add it. If StringRight($outfile, 4) <> ".au3" Then $outfile &= ".au3" ;Start Timer $timer = TimerInit() ;Read all Sections $var = IniReadSectionNames($infile) ;Set Totals for Progress $total1 = $var[0] $total2 = 0 ;Create GUI $Form1 = GUICreate("Reg2Au3", 230, 100, 193, 115) $Label1 = GUICtrlCreateLabel("", 8, 8, 214, 37) $Progress1 = GUICtrlCreateProgress(8, 52, 214, 17) GUICtrlSetLimit(-1, 100, 0) $Progress2 = GUICtrlCreateProgress(8, 76, 214, 17) GUICtrlSetLimit(-1, 100, 0) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### If @error Then MsgBox(4096, "Error", "Error getting sections.") Else For $i = 1 To $var[0] $var123 = StringReplace($var[$i], "'", "''") $text = $i & " /" & $total1 & " Sections Done - 1/1 Keys " & @CRLF & "Running for " & Round(TimerDiff($timer) / 1000, 2) & " seconds" GUICtrlSetData($Label1, $text) If GUIGetMsg() = -3 Then Exit $percent1 = Round(($i / $total1) * 100, 0) GUICtrlSetData($Progress1, $percent1) $section = IniReadSection($infile, $var[$i]) If @error Then $var123 = StringReplace($var123, "'", "''") $output &= "RegWrite ('" & $var123 & "')" & @CRLF Else $total2 = $section[0][0] For $a = 1 To $section[0][0] $text = $i & " /" & $total1 & " Sections Done - " & $a & "/" & $total2 & " Keys " & @CRLF & "Running for " & Round(TimerDiff($timer) / 1000, 2) & " seconds" GUICtrlSetData($Label1, $text) If GUIGetMsg() = -3 Then Exit $percent2 = Round(($a / $total2) * 100, 0) GUICtrlSetData($Progress2, $percent2) $key = StringReplace($section[$a][0], "@", "") $value = $section[$a][1] $type = "REG_SZ" $pos = StringInStr($value, ":") $str = StringLeft($value, $pos - 1) If @error <> 1 Then $type = $str If $type = "Hex" Then $type = "REG_BINARY" $value = StringReplace(StringTrimLeft($value, $pos), ",", "") ElseIf $type = "dword" Then $type = "REG_DWORD" $value = StringTrimLeft($value, $pos) ElseIf $type = "hex(7)" Then $type = "REG_MULTI_SZ" $value = StringTrimLeft($value, $pos) ElseIf $type = "hex(2)" Then $type = "REG_EXPAND_SZ" $value = StringTrimLeft($value, $pos) ElseIf $type = "hex(0)" Then $type = "REG_NONE" $value = StringTrimLeft($value, $pos) $post = ";" Else $type = "REG_SZ" EndIf EndIf If StringLeft($value, 1) = '"' Then $value = StringTrimLeft($value, 1) If StringRight($value, 1) = '"' Then $value = StringTrimRight($value, 1) $value = StringReplace($value, "'", "''") $key = StringReplace($key, "'", "''") $var123 = StringReplace($var123, "'", "''") If $type = "" Then $type = "" ElseIf $key = "" Then $key = "" EndIf $output &= $post & "RegWrite ('" & $var123 & "', '" & $key & "', '" & $type & "', '" & $value & "')" & @CRLF $post = "" Next EndIf Next EndIf ;No outfile then paste to clipboard If $outfile = "" Then ClipPut($output) Else If $overwrite = True Then $offset = 10 $file = FileOpen($outfile, 2 + $offset) FileWrite($file, $output) FileClose($file) EndIf GUIDelete($Form1) MsgBox(0, "Complete!", "Process completed in " & Round(TimerDiff($timer) / 1000, 2) & "seconds") Probably a one off release, I hope it helps someone- whether its parsing Reg files, or acutally using it to help in scripts. Cheers, Brett Edited October 13, 2008 by BrettF Vist my blog!UDFs: Opens The Default Mail Client | _LoginBox | Convert Reg to AU3 | BASS.au3 (BASS.dll) (Includes various BASS Libraries) | MultiLang.au3 (Multi-Language GUIs!)Example Scripts: Computer Info Telnet Server | "Secure" HTTP Server (Based on Manadar's Server)Software: AAMP- Advanced AutoIt Media Player | WorldCam | AYTU - Youtube Uploader Tutorials: Learning to Script with AutoIt V3Projects (Hardware + AutoIt): ArduinoUseful Links: AutoIt 1-2-3 | The AutoIt Downloads Section: | SciTE4AutoIt3 Full Version!
mikiutama Posted October 13, 2008 Posted October 13, 2008 i found an old version here in this forum... which is very fast compare to yours... tested with 25.6kb file: yours take >>1.93s the old one is >>0.16s (maybe because it doesnt have a progress bar...) here's the source: expandcollapse popup$Reg = FileOpenDialog("Choose a registry file", @ScriptDir, "Registry Files (*.reg)", 1) If @error = 1 Then Exit $Dir = StringLeft($Reg, StringInStr($Reg, '\', 0, -1) - 1) $NewReg = FileSaveDialog("Choose a file name", $Dir, "Scripts (*.au3)", 16) If StringRight($NewReg, 4) <> ".au3" Then $NewReg &= ".au3" If @error = 1 Then Exit $timer = TimerInit() RunWait(@ComSpec & ' /c TYPE "' & $Reg & '" > "%TEMP%\' & GetFilename($Reg) & '"', @SystemDir, @SW_HIDE) $Reg = @TempDir & "\" & GetFilename($Reg) $OpenReg = FileOpen($Reg, 0) $OpenNewReg = FileOpen($NewReg, 2) MsgBox(0, "Complete!", "Process completed in " & Round(TimerDiff($timer) / 1000, 2) & " seconds") Dim $Key Dim $valuename Global $Oldvalue = "" $value = "" $Type = "" $Write = "Yes" $Continue1 = "No" $Continue2 = "No" $Continue3 = "No" $Line = FileReadLine($OpenReg, 2) $Line = "" While 1 $Line = FileReadLine($OpenReg) If @error Then ExitLoop If StringLeft($Line, 1) = ' ' Then $value = $Line If $Continue1 = "Yes" Then $Type = "REG_BINARY" If StringRight($value, 1) = "\" Then $value = StringTrimRight($value, 1) $Oldvalue = $Oldvalue & $value $Continue1 = "Yes" $Write = "No" Else $Oldvalue = $Oldvalue & $Line $Match1 = StringInStr($Oldvalue, ":") If $Match1 >= 1 Then $Oldvalue = StringTrimLeft($Oldvalue, $Match1) $value = StringReplace($Oldvalue, ",", "") $value = Chr(34) & StringStripWS($value, 8) & Chr(34) $Oldvalue = "" $Continue1 = "No" $Write = "Yes" EndIf ElseIf $Continue2 = "Yes" Then $Type = "REG_EXPAND_SZ" If StringRight($value, 1) = "\" Then $value = StringTrimRight($value, 1) $Oldvalue = $Oldvalue & $value $Continue2 = "Yes" $Write = "No" Else $Oldvalue = $Oldvalue & $Line $value = Chr(34) & CharsToString (StringStripWS($Oldvalue, 8)) & Chr(34) $Oldvalue = "" $Continue2 = "No" $Write = "Yes" EndIf ElseIf $Continue3 = "Yes" Then $Type = "REG_MULTI_SZ" If StringRight($value, 1) = "\" Then $value = StringTrimRight($value, 1) $Oldvalue = $Oldvalue & $value $Continue3 = "Yes" $Write = "No" Else $Oldvalue = $Oldvalue & $Line $value = Chr(34) & CharsToString (StringStripWS($Oldvalue, 8)) & Chr(34) $Oldvalue = "" $Continue3 = "No" $Write = "Yes" EndIf EndIf If $Write = "Yes" Then FileWrite($OpenNewReg, 'RegWrite("' & $Key & '", ' & $valuename & ', "' & $Type & '", ' & $value & ')' & @CRLF) EndIf If $Line <> "" Then Select Case StringLeft($Line, 1) = ";" FileWrite($OpenNewReg, $Line & @CRLF) Case StringLeft($Line, 1) = "[" If StringRight($Line, 1) = " " Then $Key = StringTrimRight($Line, 2) Else $Key = StringTrimRight($Line, 1) EndIf $Key = StringTrimLeft($Key, 1) If StringLeft($Key, 1) = "-" Then FileWrite($OpenNewReg, 'RegDelete("' & StringTrimLeft($Key, 1) & '")' & @CRLF) Case StringLeft($Line, 1) = '@' $value = StringTrimLeft($Line, 2) $value = StringReplace($value, '\\', '\') If Not StringLen($value) = 2 Then $value = StringReplace($value, '""', '"') If StringLeft($value, 1) = "-" Then FileWrite($OpenNewReg, 'RegDelete("' & $Key & '", "")' & @CRLF) Else FileWrite($OpenNewReg, 'RegWrite("' & $Key & '", "", "REG_SZ", ' & $value & ')' & @CRLF) EndIf Case StringLeft($Line, 1) = '"' $line_split = StringSplit($Line, "=") $valuename = $line_split[1] $value = $line_split[2] If StringInStr($value, 'hex:') >= 1 Then $Type = "REG_BINARY" If StringRight($value, 1) = "\" Then $value = StringTrimRight($value, 1) $Oldvalue = $value $Continue1 = "Yes" $Write = "No" Else $value = StringReplace($value, ",", "") $Match1 = StringInStr($value, ":") If $Match1 >= 1 Then $value = StringTrimLeft($value, $Match1) $value = Chr(34) & StringStripWS($value, 8) & Chr(34) $Continue1 = "No" $Write = "Yes" EndIf $Match1 = StringInStr($value, ":") If $Match1 >= 1 Then $value = StringTrimLeft($value, $Match1) ElseIf StringInStr($value, "hex(2):") >= 1 Then $Type = "REG_EXPAND_SZ" If StringRight($value, 1) = "\" Then $value = StringTrimRight($value, 1) $Oldvalue = $value $Continue2 = "Yes" $Write = "No" Else $value = Chr(34) & CharsToString (StringStripWS($value, 8)) & Chr(34) $Continue2 = "No" $Write = "Yes" EndIf ElseIf StringInStr($value, "hex(7)") >= 1 Then $Type = "REG_MULTI_SZ" If StringRight($value, 1) = "\" Then $value = StringTrimRight($value, 1) $Oldvalue = $value $Continue3 = "Yes" $Write = "No" Else $value = Chr(34) & CharsToString (StringStripWS($value, 8)) & Chr(34) $Continue3 = "No" $Write = "Yes" EndIf ElseIf StringLeft($value, 5) = "dword" Then $Type = "REG_DWORD" $value = StringTrimLeft($value, 6) If StringLeft($value, 1) = "0" Then For $i = 1 To StringLen($value) $Char = StringMid($value, $i, 1) If $Char <> "0" Then ExitLoop Next $value = StringTrimLeft($value, ($i - 1)) If $value = "" Then $value = "0" EndIf If StringLeft($value, 1) <> '"' And StringRight($value, 1) <> '"' Then $value = '"' & $value & '"' Else $Type = "REG_SZ" EndIf $value = StringReplace($value, '\\', '\') If Not StringLen($value) = 2 Then $value = StringReplace($value, '""', '"') If StringLeft($value, 1) = "-" Then FileWrite($OpenNewReg, 'RegDelete("' & $Key & '", ' & $valuename & ')' & @CRLF) Else If $Write = "Yes" Then FileWrite($OpenNewReg, 'RegWrite("' & $Key & '", ' & $valuename & ', "' & $Type & '", ' & $value & ')' & @CRLF) EndIf EndSelect Else FileWrite($OpenNewReg, @CRLF) EndIf Wend FileClose($OpenNewReg) Exit Func CharsToString ($Instring) Local $Match1 Local $Type $Match1 = StringInStr($Instring, ":") If $Match1 >= 1 Then $Instring = StringTrimLeft($Instring, $Match1) Dim $Temparray, $Count $Instring = StringReplace($Instring, " ", "") ;Remove trailing nulls While StringRight($Instring, 3) = ",00" $Instring = StringTrimRight($Instring, 3) Wend ;Create an array of character values and build string $Temparray = StringSplit($Instring, ",") $Instring = "" $x = 0 For $Count = 1 To $Temparray[0] If $Temparray[$Count] <> "00" Then $Instring = $Instring & Chr(Dec($Temparray[$Count])) ;convert hex to dec then get character value and append to return string $x = 0 Else $x = $x + 1 If $x = 3 Then $x = 0 $Instring = $Instring & '" & @LF & "' EndIf EndIf Next Return $Instring EndFunc Func Debug ($message) Select Case $message = "#open" Opt ("WinTitleMatchMode", 2) Run("notepad") WinWait("Untitled", "") WinSetTitle("Untitled", "", "Debug Window") Case Else ControlSend("Debug Window", "", "Edit1", $message) EndSelect EndFunc ;==>Debug Func GetFilename($Path) Local $TempArr Local $Filename $TempArr = StringSplit($Path, "\") If @error Then $Filename = $Path Else $Filename = $TempArr[UBound($TempArr) - 1] EndIf Return $Filename EndFunc
BrettF Posted October 13, 2008 Author Posted October 13, 2008 Cool.... As I said- One off release. And it has been done many times before. Vist my blog!UDFs: Opens The Default Mail Client | _LoginBox | Convert Reg to AU3 | BASS.au3 (BASS.dll) (Includes various BASS Libraries) | MultiLang.au3 (Multi-Language GUIs!)Example Scripts: Computer Info Telnet Server | "Secure" HTTP Server (Based on Manadar's Server)Software: AAMP- Advanced AutoIt Media Player | WorldCam | AYTU - Youtube Uploader Tutorials: Learning to Script with AutoIt V3Projects (Hardware + AutoIt): ArduinoUseful Links: AutoIt 1-2-3 | The AutoIt Downloads Section: | SciTE4AutoIt3 Full Version!
toxicvn Posted October 29, 2008 Posted October 29, 2008 (edited) thank very , it very cool and good Edited October 29, 2008 by toxicvn
nguyenbason Posted June 17, 2009 Posted June 17, 2009 (edited) if the key have many lines of values like this [HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Adobe Acrobat\7.0\FeatureLockDown\cDefaultLaunchAttachmentPerms] "sBuiltInPermList"=hex:76,65,72,73,69,6f,6e,3a,31,7c,2e,61,64,65,3a,33,7c,2e,\ 61,64,70,3a,33,7c,2e,61,70,70,3a,33,7c,2e,61,73,70,3a,33,7c,2e,62,61,73,3a,\ 33,7c,2e,62,61,74,3a,33,7c,2e,62,7a,3a,33,7c,2e,62,7a,32,3a,33,7c,2e,63,65,\ 72,3a,33,7c,2e,63,68,6d,3a,33,7c,2e,63,6c,61,73,73,3a,33,7c,2e,63,6d,64,3a,\ 33,7c,2e,63,6f,6d,3a,33,7c,2e,63,6f,6d,6d,61,6e,64,3a,33,7c,2e,63,70,6c,3a,\ 33,7c,2e,63,72,74,3a,33,7c,2e,63,73,68,3a,33,7c,2e,65,78,65,3a,33,7c,2e,66,\ 78,70,3a,33,7c,2e,67,7a,3a,33,7c,2e,68,65,78,3a,33,7c,2e,68,6c,70,3a,33,7c,\ 2e,68,71,78,3a,33,7c,2e,68,74,61,3a,33,7c,2e,69,6e,66,3a,33,7c,2e,69,6e,69,\ 3a,33,7c,2e,69,6e,73,3a,33,7c,2e,69,73,70,3a,33,7c,2e,69,74,73,3a,33,7c,2e,\ 6a,6f,62,3a,33,7c,2e,6a,73,3a,33,7c,2e,6a,73,65,3a,33,7c,2e,6b,73,68,3a,33,\ 7c,2e,6c,6e,6b,3a,33,7c,2e,6c,7a,68,3a,33,7c,2e,6d,61,64,3a,33,7c,2e,6d,61,\ 66,3a,33,7c,2e,6d,61,67,3a,33,7c,2e,6d,61,6d,3a,33,7c,2e,6d,61,71,3a,33,7c,\ 2e,6d,61,72,3a,33,7c,2e,6d,61,73,3a,33,7c,2e,6d,61,74,3a,33,7c,2e,6d,61,75,\ 3a,33,7c,2e,6d,61,76,3a,33,7c,2e,6d,61,77,3a,33,7c,2e,6d,64,61,3a,33,7c,2e,\ 6d,64,65,3a,33,7c,2e,6d,64,74,3a,33,7c,2e,6d,64,77,3a,33,7c,2e,6d,64,7a,3a,\ 33,7c,2e,6d,73,63,3a,33,7c,2e,6d,73,69,3a,33,7c,2e,6d,73,70,3a,33,7c,2e,6d,\ 73,74,3a,33,7c,2e,6f,63,78,3a,33,7c,2e,6f,70,73,3a,33,7c,2e,70,63,64,3a,33,\ 7c,2e,70,69,66,3a,33,7c,2e,70,72,66,3a,33,7c,2e,70,72,67,3a,33,7c,2e,70,73,\ 74,3a,33,7c,2e,72,61,72,3a,33,7c,2e,72,65,67,3a,33,7c,2e,73,63,66,3a,33,7c,\ 2e,73,63,72,3a,33,7c,2e,73,63,74,3a,33,7c,2e,73,65,61,3a,33,7c,2e,73,68,62,\ 3a,33,7c,2e,73,68,73,3a,33,7c,2e,73,69,74,3a,33,7c,2e,74,61,72,3a,33,7c,2e,\ 74,67,7a,3a,33,7c,2e,74,6d,70,3a,33,7c,2e,75,72,6c,3a,33,7c,2e,76,62,3a,33,\ 7c,2e,76,62,65,3a,33,7c,2e,76,62,73,3a,33,7c,2e,76,73,6d,61,63,72,6f,73,3a,\ 33,7c,2e,76,73,73,3a,33,7c,2e,76,73,74,3a,33,7c,2e,76,73,77,3a,33,7c,2e,77,\ 65,62,6c,6f,63,3a,33,7c,2e,77,73,3a,33,7c,2e,77,73,63,3a,33,7c,2e,77,73,66,\ 3a,33,7c,2e,77,73,68,3a,33,7c,2e,7a,69,70,3a,33,7c,2e,7a,6c,6f,3a,33,7c,2e,\ 7a,6f,6f,3a,33,7c,2e,70,64,66,3a,32,7c,2e,66,64,66,3a,32,00 Then it only get the first line only RegWrite ('HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Adobe Acrobat\7.0\FeatureLockDown\cDefaultLaunchAttachmentPerms', '"sBuiltInPermList"', 'REG_BINARY', '76657273696f6e3a317c2e6164653a337c2e\') Also missing many lines. 65.5MB reg file run 282s only out 100KB with 187 lines. While run the code posted by mikiutama out 10MB with 17000+ lines. Maybe need some changes Edited June 17, 2009 by nguyenbason UnderWorldVN- Just play the way you like it
BrettF Posted June 17, 2009 Author Posted June 17, 2009 Sorry (not really) to be arrogant, but I couldn't care less. Use his code then. Vist my blog!UDFs: Opens The Default Mail Client | _LoginBox | Convert Reg to AU3 | BASS.au3 (BASS.dll) (Includes various BASS Libraries) | MultiLang.au3 (Multi-Language GUIs!)Example Scripts: Computer Info Telnet Server | "Secure" HTTP Server (Based on Manadar's Server)Software: AAMP- Advanced AutoIt Media Player | WorldCam | AYTU - Youtube Uploader Tutorials: Learning to Script with AutoIt V3Projects (Hardware + AutoIt): ArduinoUseful Links: AutoIt 1-2-3 | The AutoIt Downloads Section: | SciTE4AutoIt3 Full Version!
James Posted June 17, 2009 Posted June 17, 2009 Sorry (not really) to be arrogant, but I couldn't care less. Use his code then.*cough* Covert? Blog - Seriously epic web hosting - Twitter - GitHub - Cachet HQ
AZJIO Posted March 8, 2010 Posted March 8, 2010 (edited) mikiutama$result=StringRegExpReplace($result,'\n\r?\n\r?',"")REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls] "X:\\I386\\system32\\MSVCP60.DLL"=dword:00000006 [HKEY_CLASSES_ROOT\CakewalkBundleFile\Shell\Open\Command] @="\"X:\\Programs\\Cakewalk\\Music Creator Pro24 2004\\CWMC.EXE\" \"%1\""RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls", "X:\\I386\\system32\\MSVCP60.DLL", "REG_DWORD", "6")RegWrite("HKEY_CLASSES_ROOT\CakewalkBundleFile\Shell\Open\Command", "", "REG_SZ", "\"X:\Programs\Cakewalk\Music Creator Pro24 2004\CWMC.EXE\" \"%1\"") Edited March 8, 2010 by AZJIO My other projects or all
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now