注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

临颍中远电脑科技

专业装机,网吧维护,电脑维修,网络监控,数据恢复,

 
 
 

日志

 
 

au3 XP注册表文件转成AU3脚本  

2012-03-27 20:38:33|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

#NoTrayIcon
#AutoIt3Wrapper_icon=D:\autoit3\Aut2Exe\Icons\apps.ico
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseAnsi=y
#AutoIt3Wrapper_Res_Comment=Autoit 中文论坛
#AutoIt3Wrapper_Res_Description=注册表文件转AU3脚本
#AutoIt3Wrapper_Res_Fileversion=1.0.0.2
#AutoIt3Wrapper_Res_LegalCopyright=Amu
Opt("MustDeclareVars", 1)
Dim $regfile, $tmptext, $autfile, $tmpfile = @TempDir & "\tmpreg.tmp"
$regfile = FileOpenDialog("选择一个注册表文件。", @ScriptDir, "注册文件(*.reg)", 1)
If @error Or Not FileExists($regfile) Then Exit
If FileReadLine($regfile) <> "Windows Registry Editor Version 5.00" Then
MsgBox(16,"选择一个注册表文件。", $regfile & " 不是有效的(或不支持的)注册表文件!")
Exit
EndIf
$autfile = FileSaveDialog("输入一个文件名。", StringLeft($regfile, StringInStr($regfile, "\", 0, -1) - 1), "AutoIt脚本(*.au3)", 18, _
   StringTrimRight(StringTrimLeft($regfile, StringInStr($regfile, '\', 0, -1)), 4))
If @error Or Not $autfile Then Exit
If Not StringRegExp($autfile, "\.au3$") Then $autfile &= ".au3"
If FileExists($autfile) And _
   MsgBox(308, "输入一个文件名。", $autfile & " 已存在。" & @LF & "要替换它吗?") <> 6 Then Exit

$tmptext = FileRead ( $regfile, FileGetSize ($regfile) )
$tmptext = StringReplace($tmptext, "\" & @CRLF & " ", "")
If FileExists($tmpfile) Then FileDelete($tmpfile)
FileWrite($tmpfile, $tmptext)
_reg_to_au3($tmpfile, $autfile)
If FileExists($tmpfile) Then FileDelete($tmpfile)

Func _reg_to_au3($R_File, $A_File)
Local $file, $KN, $VN, $TV, $i, $ii, $Prefixes
$KN = IniReadSectionNames($R_File)
If @error Then Exit
$file = FileOpen($A_File, 2)
If $file = -1 Then Return 0
FileWrite($file, ";ACN 中文论坛出品" & @CRLF & ";by Amu QQ:33078632" & @CRLF)
For $i = 1 To $KN[0]
   FileWrite($file, @CRLF)
   $VN = IniReadSection($R_File, $KN[$i])
   If StringLeft($KN[$i], 1) = "-" Then
    $KN[$i] = StringTrimLeft($KN[$i], 1)
    FileWrite($file, "RegDelete ( """ & $KN[$i] & """ )" & @CRLF)
    $Prefixes = ";~ "
   Else
    $Prefixes = ""
   EndIf
   If Not IsArray($VN) Then
    FileWrite($file, "RegWrite ( """ & $KN[$i] & """ )" & @CRLF)
    ContinueLoop
   EndIf
   For $ii = 1 To $VN[0][0]
    If $VN[$ii][0] = "@" Then $VN[$ii][0] = '""'
    If StringInStr($VN[$ii][0], "\\") Then $VN[$ii][0] = StringReplace($VN[$ii][0], "\\", "\")
    If StringInStr($VN[$ii][0], '\"') Then $VN[$ii][0] = StringReplace($VN[$ii][0], '\"', '""')
    $TV = _fix_type_and_value($VN[$ii][1])
    If @error Or Not $TV[0] Then
     If $TV[1] = "-" Then FileWrite($file, $Prefixes & "RegDelete ( """ & $KN[$i] & """, " & $VN[$ii][0] & " )" & @CRLF)
     ContinueLoop
    EndIf
    FileWrite($file, $Prefixes & "RegWrite ( """ & $KN[$i] & """, " & $VN[$ii][0] & ", """ & $TV[0] & """, " & $TV[1] & " )" & @CRLF)
   Next
Next
Return FileClose($file)
EndFunc   ;==>_reg_to_au3

Func _fix_type_and_value($str)
Local $Return[2], $s, $i, $d
Switch StringLeft($str, StringInStr($str, ":") - 1)
   Case "dword"
    $Return[0] = "REG_DWORD"
    $Return[1] = StringTrimLeft($str, StringInStr($str, ':'))
    $Return[1] = Dec($Return[1])
   Case "hex"
    $Return[0] = "REG_BINARY"
    $Return[1] = """" & StringTrimLeft($str, StringInStr($str, ':')) & """"
    If StringInStr($Return[1], ",") Then $Return[1] = StringReplace($Return[1], ",", "")
   Case "hex(7)"
    $Return[0] = "REG_MULTI_SZ"
    $Return[1] = StringTrimLeft($str, StringInStr($str, ':'))
    $s = StringSplit($Return[1], ",")
    If $s[0] > 5 Then
     $Return[1] = """"
     For $i = 1 To $s[0] - 4 Step 2
      $d = Dec($s[$i + 1] & $s[$i])
      If $d Then
       If ChrW($d) = '"' Then
        $Return[1] &= '""'
       Else
        $Return[1] &= ChrW($d)
       EndIf
      Else
       $Return[1] &= """ & @LF & """
      EndIf
     Next
     $Return[1] &= """"
    Else
     $Return[1] = """"""
    EndIf
   Case "hex(2)"
    $Return[0] = "REG_EXPAND_SZ"
    $Return[1] = StringTrimLeft($str, StringInStr($str, ':'))
    $s = StringSplit($Return[1], ",")
    If $s[0] > 3 Then
     $Return[1] = """"
     For $i = 1 To $s[0] - 2 Step 2
      $d = Dec($s[$i + 1] & $s[$i])
      If ChrW($d) = '"' Then
       $Return[1] &= '""'
      Else
       $Return[1] &= ChrW($d)
      EndIf
     Next
     $Return[1] &= """"
    Else
     $Return[1] = """"""
    EndIf
   Case Else
    If StringRegExp($str, """.*""") Then
     $Return[0] = "REG_SZ"
     $Return[1] = StringTrimLeft($str, 1)
     $Return[1] = StringTrimRight($Return[1], 1)
     If StringInStr($Return[1], "\\") Then $Return[1] = StringReplace($Return[1], "\\", "\")
     If StringInStr($Return[1], '\"') Then $Return[1] = StringReplace($Return[1], '\"', '""')
     $Return[1] = """" & $Return[1] & """"
    ElseIf $str = "-" Then
     $Return[1] = $str
    Else
     SetError(1)
    EndIf
EndSwitch
Return $Return
EndFunc   ;==>_fix_type_and_value

  评论这张
 
阅读(679)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017