$sKey='HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics' $Data='' $Re='' RegReplace($sKey) ;MsgBox(0, "ага", $Data) ;=========================== $filename=@ScriptDir&'\backup' ; генерируем имя нового файла с номером копии на случай если файл существует $i = 1 While FileExists($filename&$i&'.reg') $i +=1 WEnd $filename=$filename&$i&'.reg' $filebackup = FileOpen($filename, 2) ; открываем бэкап-файл FileWrite($filebackup, 'Windows Registry Editor Version 5.00'&@CRLF&@CRLF&$Data) ;FileWrite($filebackup, 'REGEDIT4'&@CRLF&@CRLF&$Data) ; для win98 FileClose($filebackup) ;=========================== Func RegReplace($sKey) ;$sKey - исходная ветка Local $i, $sTemp, $sValuename, $sValue, $sValuetype $i = 0 While 1 $i += 1 $sValuename = RegEnumVal($sKey, $i) If @error Then ExitLoop $sValue = RegRead($sKey, $sValuename) If @error=1 or @error=-1 or @error=-2 Then ContinueLoop $sValuetype = @extended ;здесь идет модификация реестра $sKeyYYY = StringTrimRight($sKey & '\' & $sTemp,1) $sValuename=StringRegExpReplace($sValuename,'[\\]',"\\$0") ; всегда заменяем в параметре наклонную черту на двойную Switch $sValuetype Case 1, 2, 7 ;ContinueLoop $sValue=StringRegExpReplace($sValue,'["\\]',"\\$0") $sValue=StringRegExpReplace($sValue,'=\\"\\"','="\\"') $sValue=StringRegExpReplace($sValue,'\\"\\"','\\""') If $Re=$sKeyYYY Then $Data&='"'&$sValuename&'"="'&$sValue&'"'&@CRLF Else $Data&=@CRLF&'['&$sKeyYYY&']'&@CRLF&'"'&$sValuename&'"="'&$sValue&'"'&@CRLF $Re=$sKeyYYY EndIf Case 4 ;ContinueLoop If $Re=$sKeyYYY Then $Data&='"'&$sValuename&'"=dword:'&Hex ( $sValue )&@CRLF Else $Data&=@CRLF&'['&$sKeyYYY&']'&@CRLF&'"'&$sValuename&'"=dword:'&Hex ( $sValue )&@CRLF $Re=$sKeyYYY EndIf Case 3 ;ContinueLoop $hex='' $len = StringLen($sValue) $s=0 $r=0 For $i = 3 To $len Step 2 $hex2 = StringMid($sValue, $i, 2) If $s=21 or $r=24 Then $hex&=$hex2&',\'&@CRLF&' ' $s=22 $r=0 Else $hex&=$hex2&',' $s+=1 $r+=1 EndIf Next $hex = StringTrimRight($hex,1) If $Re=$sKeyYYY Then $Data&='"'&$sValuename&'"=hex:'&$hex&@CRLF Else $Data&=@CRLF&'['&$sKeyYYY&']'&@CRLF&'"'&$sValuename&'"=hex:'&$hex&@CRLF $Re=$sKeyYYY EndIf Case Else $Data&='# error... ключ:"'&$sKeyYYY&'" параметр:"'&$sValuename&'" значение:"'&$sValue&'" тип:"'&$sValuetype&'"'&@CRLF EndSwitch WEnd ;рекурсия $i = 0 While 1 $i += 1 $sTemp = RegEnumKey($sKey, $i) If @error Then ExitLoop RegReplace($sKey & '\' & $sTemp) WEnd $Data=StringReplace($Data, '""=', '@=') Return EndFunc |